Во-первых, простите мне использование термина «единица измерения», когда, возможно, я имею в виду интеграционный тест.Однако в этом случае я рассматриваю тестирование метода DAO как единое целое и не пытаюсь издеваться над подчеркивающей базой данных.
Я пытался протестировать определенный метод DAO, который ищет конкретные объекты -
public Factor GetMatchingFactor(int aircraftStoresConfigurationId, int stationId, DateTime timeStamp)
{
// code etc....
}
Нет, обычно я пытаюсь провести несколько модульных тестов, возможно, несколько для каждого параметрачтобы убедиться, что каждый рассматривается соответствующим образом.Обычно я доволен этим, когда сам метод обрабатывает параметр, а в худшем случае вызывает зависимого, который я могу проверить с помощью макетов / заглушек.Однако в этом конкретном методе результатом метода является не чистая функция или один параметр, а скорее функция параметров И тестовых данных.
Поэтому я изо всех сил пытаюсь определить такие тесты, как
public void TestThatAircraftStoresConfigurationIdParameterIsApplied
public void TestThatStationIdParameterIsApplied
public void TestThatTimeStampParameterIsApplied
, поскольку их имена неверны, каждый не просто проверяет одну вещь.
Это также означает, что яизо всех сил пытается следовать правилу только одного утверждать за тест.
Поэтому я протестировал этот метод, используя следующий код с таким же охватом и, возможно, более значимым.
[Test]
public void TestReturnsCorrectResult()
{
Assert.That(_sut.GetMatchingFactor(10001, Station.Station9Id, new DateTime(2011, 11, 16, 10, 00, 00)).Id, Is.EqualTo(1), "Test 1");
Assert.That(_sut.GetMatchingFactor(10001, Station.Station9Id, new DateTime(2011, 11, 16, 11, 00, 00)).Id, Is.EqualTo(1), "Test 2");
Assert.That(_sut.GetMatchingFactor(10001, Station.Station9Id, new DateTime(2011, 11, 16, 19, 00, 00)).Id, Is.EqualTo(1), "Test 3");
Assert.That(_sut.GetMatchingFactor(10001, Station.Station9Id, new DateTime(2011, 11, 16, 19, 00, 01)).Id, Is.EqualTo(2), "Test 4");
Assert.That(_sut.GetMatchingFactor(10001, Station.Station9Id, new DateTime(2011, 11, 16, 19, 00, 02)).Id, Is.EqualTo(2), "Test 5");
Assert.That(_sut.GetMatchingFactor(10001, Station.Station9Id, new DateTime(2011, 11, 16, 14, 00, 00)).Id, Is.EqualTo(1), "Test 6");
Assert.That(_sut.GetMatchingFactor(10001, Station.Station10Id, new DateTime(2011, 11, 16, 14, 00, 00)).Id, Is.EqualTo(1), "Test 7");
Assert.That(_sut.GetMatchingFactor(10002, Station.Station11Id, new DateTime(2011, 11, 16, 14, 00, 00)).Id, Is.EqualTo(3), "Test 8");
Assert.That(_sut.GetMatchingFactor(10002, Station.Station12Id, new DateTime(2011, 11, 16, 14, 00, 00)).Id, Is.EqualTo(3), "Test 9");
}
Меня не устраивают множественные утверждения, но это кажется единственным логичным способом структурировать эти тесты.Кто-нибудь может предложить лучший вариант?