Относительно ваших новых вопросов:
Должен ли я проверять каждое свойство ITMData или я должен тестировать весь объект?
Если вы хотите быть в безопасностиу вас, вероятно, должен быть хотя бы один тест, который проверяет соответствие каждого свойства.
А как насчет именования моего теста?
Существует довольно много дискуссий оэта тема, такая как эта .Общее правило состоит в том, что в вашем классе модульного тестирования должно быть несколько методов, каждый из которых направлен на тестирование чего-то конкретного.В вашем случае это могут быть такие вещи, как:
public void Check_All_Properties_Parsed_Correctly(){.....}
public void Exception_Thrown_If_Lines_Is_Null(){.....}
public void Exception_Thrown_If_Lines_Is_Wrong_Length(){.....}
Итак, другими словами, тестирование на точное поведение, которое вы считаете «правильным» для синтаксического анализатора.Как только это будет сделано, вы почувствуете себя намного легче при внесении изменений в код синтаксического анализатора, потому что у вас будет всеобъемлющий набор тестов, чтобы убедиться, что вы ничего не сломали.Не забывайте регулярно проверять и обновлять тесты при внесении изменений!Существует довольно хорошее руководство по модульному тестированию и разработке через тестирование на MSDN .
В общем, я думаю, что вы можете найти ответы на большинство ваших вопросов, немного погуглив.Есть также несколько превосходных книг по разработке через тестирование, в которых рассказывается не только о как TDD, но и о почему .Если вы относительно независимы от языка программирования, я бы порекомендовал Кента Бека "Разработка через тестирование на примере , иначе что-то вроде Разработка через тестирование в Microsoft .NET .Это должно очень быстро привести вас на правильный путь.
РЕДАКТИРОВАТЬ:
Я завышаю свои тесты?
На мой взгляд, да.В частности, я не согласен с вашей следующей строкой:
Если я проверю все свойства в одном классе, я потеряю эту информацию.
Каким образом вы теряете информацию?Допустим, есть 2 способа выполнить этот тест, кроме создания нового класса для каждого теста:
- Иметь разные методы для каждого свойства.Ваши методы тестирования могут называться
CheckPropertyX
, CheckPropertyY
и т. Д. Когда вы запустите свои тесты, вы увидите, какие именно поля были пройдены, а какие - нет.Это явно соответствует вашим требованиям, хотя я бы сказал, что это все еще излишне.Я бы выбрал вариант 2: - У меня есть несколько разных методов, каждый из которых проверяет один конкретный аспект.Это то, что я изначально рекомендовал, и я думаю, что вы имеете в виду.Когда один из тестов не пройден, вы получите информацию только о первой неудачной вещи для каждого метода, но если вы правильно закодировали свой Assert, вы будете знать точно , какое свойство неверно.Рассмотрим следующий код:
Assert.AreEqual("test1", myObject.PropertyX, "Property X was incorrectly parsed");
Assert.AreEqual("test2", myObject.PropertyY, "Property Y was incorrectly parsed");
При сбое одного из них вы узнаете, какая линия вышла из строя.После исправления соответствующей ошибки и повторного запуска тестов вы увидите, не сработали ли какие-либо другие свойства.Обычно это тот подход, который используется большинством людей, потому что создание класса или даже метода для каждого свойства приводит к слишком большому количеству кода и слишком большой работе, чтобы идти в ногу со временем.