首先,請原諒我使用術語「單元」,或許我的意思是集成測試。但是,在這種情況下,我將DAO方法的測試視爲一個單元,而不是試圖模擬下劃線數據庫。如何組織或分類單元測試DAO搜索方法
我一直在試圖測試搜索特定實體中的特定DAO方法 -
public Factor GetMatchingFactor(int aircraftStoresConfigurationId, int stationId, DateTime timeStamp)
{
// code etc....
}
不,通常情況下,我嘗試有幾個單元測試,也許幾個每個參數,以確保每一個是妥善處理。當這個方法本身處理這個參數時,我對此很滿意,而且更糟糕的是調用一個依賴關係,我可以使用mocks/stub來測試。但是,在這種特定的方法中,方法的結果不是純函數或一個參數,而是參數和測試數據的函數。
因此,我很難定義諸如
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");
}
我不喜歡多重斷言,但它似乎是構建這些測試的唯一合乎邏輯的方法。任何人都可以提出更好的選擇?