I am filled with solutions

Weekly essays on testability, testing and being a tester.

Putting code examples where my mouth is

I back up the high level preaching with code.

I have had requests to back up the “high level concepts” I am talking about with concrete examples. This is an example of sticking with the simplest possible automation versus using a more “perfect” solution.

Test automation should be optimized for a simple set of goals.

In a nutshell I advocate making tradeoffs that make your test automation.

       Simple

       Fast

       Deterministic

       Diagnostic

       Maintainable

There are many benefits

You can deliver more tests earlier. Your test automation is easier to understand and hand off. Most of all, this pattern has worked for me in the past when other patterns failed.

On to the Examples

 

I prefer to create 10 or 100 tests that very narrow and tied to the code versus spending the same amount of time to create one test that’s very general and handles all the possible errors the code could generate.

 

a very simple test that is narrow and in this case makes assumptions about the install path:

 

 

Cost to dev and test 10 minutes

public void MyFeatureIsInstalled()

        {          

            string defaultFile = @"C:\Inetpub\wwwroot\default.aspx";

            bool isDefaultInstalled = System.IO.File.Exists(defaultFile);

            string message = string.Format("{0} exists =  {1}", defaultFile, isDefaultInstalled);

            Assert.IsTrue(isDefaultInstalled, message);                       

        }

 

 

Example of the same test that’s more flexible, but may not be worth the time to create. This is based on real tests that I have seen in groups around Microsoft. Methods highlighted in bold are further code that would need to be written and tested. The complexity this type of “framework” adds almost always ends up making SDETS less productive rather than more productive in practice. There are a lot of hidden taxes.

 

 

Cost to dev and test 60 minutes + extra time for the framework.

public void MyFeatureIsInstalled()

        {

            string defaultFileLocation = getInstallLocationFromRegistry();

            string defaultFilename = TestHelperMethods.GetNamedParameter("defaultFileName");

 

            if (String.IsNullOrEmpty(defaultFileLocation))

            {

                defaultFileLocation = TestHelperMethods.GetNamedParameter("defaultFileLocation");

            }

 

            if (String.IsNullOrEmpty(defaultFilename))

            {

                Log.Fail("Unable to get default file name from test parameter system.")

            }

 

            string defaultFile = string.Format(@"{0}\{1}", defaultFileLocation + defaultFilename);

            bool isDefaultInstalled = System.IO.File.Exists(defaultFile);

            string message = string.Format("{0} exists =  {1}", defaultFile, isDefaultInstalled);

            Assert.IsTrue(isDefaultInstalled, message);

        }

 

 

 

Know when to use the various tools you have

I am not saying you never invest in the second type of automation. What I am saying is that defaulting to the perfection style will slow you down unnecessarily. Test code has a different mission than product code.

Deliver some simple, fast to write tests to give your team some automation cover before you invest in flexible parameter driven methods.

Published Tuesday, January 22, 2008 11:34 PM by SaintD

Comments

No Comments
Anonymous comments are disabled

About SaintD

Dustin Andrews has been testing software at Microsoft since 2001. He currently programs primary in C# and has loved it ever since he learned it had a good regex class. He came from the industry where he has been an ISP unix admin, Perl and SQL developer, dev lead, help desk technician and manager. He has also waited tables, worked many long nights as a convenience store clerk disinfected shoes in a bowling alley and done other jobs he has blocked out of his memory. He is currently in the Unlimited Potential Group as a Server Test Lead.

© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Microsoft
Page view tracker