One of the most challenging aspects of software development is naming. In order to maximize the value of the tests we write, it is important to follow a naming convention that helps with quick understanding of test failures, grouping tests by functionality, and providing a simple yet meaningful approach to test naming.
The convention of MethodName_Given{Scenario}_Should{ExpectedResult}
is preferred. This convention is easy to understand and allows for quick identification of the method being tested, the scenario being evaluated, and the expected outcome.
- MethodName - The name of the method being tested on the object.
- Given{Scenario} - A higher-level idea or context for the test. Avoid using specific technical terms if possible.
- Should{ExpectedResult} - The expected outcome of the test. This helps the reader to understand the test without reading the method body.
C# Example
[TestCase(6)] [TestCase(9)] public class FizzBuzzer { public string FizzBuzz(string input) { //---------------Arrange------------------- var fizzBuzzer = CreateFizzBuzzer(); //---------------Act---------------------- var result = fizzBuzzer.GetResult(input); //---------------Assert----------------------- var expected = "Fizz"; Assert.AreEqual(expected, result); } }
For the following code snippet, a meaningful C# test name might be:
FizzBuzz_GivenMultipleOf3_ShouldReturnFizz
- FizzBuzz - The name of the method being tested.
- GivenMultipleOf3 - A higher-level idea or context for the test. This suggests that the method is being tested with a number that is a multiple of 3.
- ShouldReturnFizz - The expected outcome of the test. This helps the reader to understand what the test is checking for.