首先,请原谅我使用术语“单元”,或许我的意思是集成测试。但是,在这种情况下,我将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");
}
我不喜欢多重断言,但它似乎是构建这些测试的唯一合乎逻辑的方法。任何人都可以提出更好的选择?