From empirical evidence, we know that improving code coverage by verifying all the boundary conditions, and ensuring quality of code-base significantly enhances maintainability and comprehensibility of complex software systems. Therefore, writing effective unit and integration tests has become one of the integral part in software development life cycle. In fact, development methodology such as TDD has been embraced rapidly due to these realized benefits.
In today’s post, we talk more about
mstest. In particular, we focus on its usage in devising effective unit tests. Before moving forward, we would like to outline the previous posts of the series regarding Unit Testing.
What is TestContext?
TestContext is an abstract class of
Microsoft.VisualStudio.TestTools.UnitTesting namespace. It exposed several properties related to the current context (i.e., current test run). In addition, it provides following supports:
- Get/set context-sensitive properties and instances, For instance,
- During Asp.net unit tests, it stores server’s URL, and Page object.
- For data driven unit tests, it provides access to the data rows.
- Mechanism to measure performance of unit tests.
Following is the class definition of the
How can we initialize TestContext?
To start using
TestContext, we need to add a property in our unit test class, e.g.,
UserManagerTests, as illustrated below.
As we run a unit test defined in
UserManagerTests, we automatically get an instance of
TestContext with the relevant properties configured according to the current context. Thus, we do not require to explicitly instantiate it. Using debug mode, we can verify that the instance of
TestContext is an instance of
UnitTestAdapterContext, which is, in fact, derived from
TestContext abstract class.
Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter.dll assembly contains
UnitTestAdapterContext class, which is located in the directory of private assemblies installed in
<vs installation directory>\common7\IDE\PrivateAssemblies.
Note that the property
TestContext is actually initialized after
ClassInitialize and before
TestInitialize gets invoked.
In this post, we discuss how we can initialize
TestContext in a test class. As a continuation of this discussion, we outline several use-cases of
TestContext in the following posts.
- Getting Directory of Current Context with TestContext.
- Performance Measurement with TestContext.
- Output Additional Information with TestContext.
- Unit Testing in ASP.NET Context with TestContext.
- TestContext in Data Driven Unit Tests.
- Add Result File with TestContext.
To sum up, in this series, we introduce
TestContext and has discussed how we can utilize it in different scenarios to write effective unit and integration tests. We hope that it would help to devise more effective and maintainable unit tests. Lastly, we emphasize on designing test cases thoroughly, and mapping them essentially into unit and integration tests accordingly, because only "harnessing the power that is provided by the tool and utilizing it effectively and every possible way" could bring desirable result. We highly appreciate any comments or any suggestion regarding this series. Thanks.
[R-1: 04-04-2013] Porting this blog-post from its weblogs.asp.net page.