Unit Test Naming Conventions
Explore the importance of naming conventions and using standardized and informative test names.
Introduction
Naming tests in a robust and informative way is an important aspect of writing tests. The importance of correct naming is arguably more important than the naming of the application code. This is because although application code naming is important, the expressiveness of application code is sometimes sacrificed for the sake of brevity.
In the case of test code, however, the brevity of names is sacrificed for expressiveness. This is because test code is seen as a form of documentation. If a software engineer is introduced to the code, their familiarization process is significantly enhanced through the reading of the various test cases. In turn, understanding test cases are enhanced through descriptive naming.
The importance of correct naming
Unit tests are seen as a form of documentation that enables software engineers to familiarize themselves with the code. Therefore, from a pure documentation point of view, precise naming is extremely important. However, from the point of view of running tests themselves, naming holds no value. NUnit does not implicitly rely on any naming conventions to run tests. Therefore, names could be arbitrarily changed, and the tests would still run.
Unit test areas requiring good naming
There are four areas of test code where good naming is critical.
- The names of the test projects.
- The names of the files that are included in the test projects.
- The name of the test classes that contain the test cases.
- The name of the test cases that contain one or more assertions.
Universal best practices of naming
There is a set of universally understood best practices with regard to naming individual test cases. These include the following:
- Test names must describe some form of specification requirement.
- Test names must allude to some form of input and associated output.
- Test names should allude to some form of context so they may be read standalone.
Naming projects, files, and classes
The following is the simplest and most effective way to name test project, test files, and test classes:
- Projects: Test projects should be named the same as the application project that they test with the word,
Test
appended. For example, if the application code project is calledProject
, the test project name should be calledProjectTest
. - Classes: Test classes should be named the same as the class that they test with the word,
Test
, appended. For example, if the application code class is calledBankAccount
, the test class should be calledBankAccountTest
. - Files: Since each file contains one class, the name of the files should follow the names of their containing classes. For example, if a test class is called
BankAccountTest
, the file within which it is contained should also be calledBankAccountTest
.
This naming convention is not universally adopted by the industry. For example, many practices advocate appending .UnitTest
in the project name as opposed to merely appending the word Test
. This has the added benefit of distinguishing them from other types of tests such as integration tests.
Commonly accepted naming conventions
Significant naming convention variation occurs at the test method level. These conventions, as well as some examples, are included below:
Naming convention | Examples |
---|---|
Feature_being_tested |
not_an_adult_if_age_is_under_18 |
MethodName_StateUnderTest_ExpectedBehavior |
isAdult_AgeLessThan18_False |
MethodName_ExpectedBehavior_StateUnderTest |
isAdult_False_AgeLessThan18 |
test[Feature being tested] |
testIsNotAnAdultIfAgeLessThan18 |
Feature to be tested |
IsNotAnAdultIfAgeLessThan18 |
Should_ExpectedBehavior_When_StateUnderTest |
Should_ThrowException_When_AgeLessThan18 |
When_StateUnderTest_Expect_ExpectedBehavior |
When_AgeLessThan18_Expect_isAdultAsFalse |
Given_Preconditions_When_StateUnderTest_Then_ExpectedBehavior |
Given_UserIsAuthenticated_When_InvalidAccountNumberIsUsedToWithdrawMoney_Then_TransactionsWillFail |
Given the simplicity of the first method naming convention, it is adopted in the remainder of this course. The most important practice to adhere to after selecting a test naming convention is to keep it consistent across your project.
Quiz your knowledge on naming conventions
For the following test code, answer the question that follows. Suppose the application code is in a project called MeasurementApplication
and the test code is in a project called TestMeasurementApplication
.
Get hands-on with 1400+ tech skills courses.