Я не знаю, и мне не нравятся самые распространенные соглашения об именах.Я нахожу их трудно читать и понимать.Основываясь на нескольких других соглашениях об именах (которые я не могу сказать, какое из них сейчас), я разработал свой собственный, вот оно:
Допустим, у меня есть следующий класс для тестирования:
public class ColorParser {
public static bool TryParseHex(string value, out Color color) {
// Code to parse the hex color value.
}
}
MyМодульные тесты для этого конкретного метода выглядят следующим образом:
public class ColorParserTests
{
public class TryParseHexTests
{
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void TestNullValue()
{
Color color = Color.Empty;
ColorParser.TryParseHex(null, out color);
}
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void TestEmptyValue()
{
Color color = Color.Empty;
ColorParser.TryParseHex(string.Empty, out color);
}
[TestMethod]
public void TestInvalidValues()
{
string[] invalidValues = new string[]
{
"#",
"FF",
"#FF",
"#FFAA",
"asdf"
};
foreach (var invalidValue in invalidValues)
{
Color color = Color.Empty;
bool result = ColorParser.TryParseHex(invalidValue, out color);
Assert.IsFalse(result, string.Format("Value '{0}' must not pass the test!", invalidValue));
}
}
[TestMethod]
public void TestValidValues()
{
// Spaces are intended and a part of the test!
Dictionary<string, Color> validValues = new Dictionary<string, Color>()
{
{" #000000", Color.FromArgb(0,0,0)},
{" #010203 ", Color.FromArgb(1,2,3)},
{"#00FFFF", Color.FromArgb(0,255,255)},
{"#FF00FFFF", Color.FromArgb(255,0,255,255)},
};
foreach (var validValue in validValues)
{
Color color = Color.Empty;
bool result = ColorParser.TryParseHex(validValue.Key, out color);
Assert.IsTrue(result, string.Format("Value '{0}' must pass the test!", validValue.Key));
Assert.AreEqual(validValue.Value, color, "Parsed color must be the same.");
}
}
}
}
Идея, лежащая в основе этого, заключается в том, что отдельные тесты группируются (в классах), что позволяет мне тестировать их отдельно.Нет необходимости повторять проверяемое имя метода каждый раз.Метод тестирования начинается с глагола, подобного имени метода, и он просто содержит краткую информацию о том, что именно тестируется.Все остальное находится внутри теста.
Таким образом, я очень быстро знаю, что я тестирую, и результаты должны быть определены внутри самих тестов, потому что я тестирую поведение для некоторых значений, которые либо являются правильнымиили неверный.
Нули и Emptys и другие особые случаи, которые выдают исключения, заслуживают их собственных тестов.
Вы можете разбить тесты и написать больше тестов, таких как TestValuesWithSpaces
или TestNegativeDeposit
или TestUserNameWithInvalidCharacters
и т. Д. Это всегда зависит от того, сколько стоит тест и насколько точно вы хотите это сделать.В этом случае я подумал, что этого достаточно.Во всяком случае, я думаю, что это очень наглядно.