0

当您为逻辑层编写测试时,您模拟了所使用的数据访问层,因为您不希望测试用例相互依赖。

但是查找表呢?假设您有一个根据Sizes表中的大小计算值的逻辑:

小 1
中 2
大 3

现在,您是否在测试中以某种方式模拟此表?例如使用字典?当表发生变化时(一个真正的配置表将包含数百个值,有时不会是简单的键值形式)你如何保持代码和表不同步?

或者你改变这个规则......并直接从数据库中获取值?但是如果明天我更改数据源怎么办?或者我无法以某种方式访问​​数据库?测试用例不应该在任何条件下运行吗?

最好的方法是什么?

4

2 回答 2

1

我仍然会模拟查找表,即使对于“快乐”的测试场景,您只需返回从数据库返回的真实数据。

但是您可以灵活地测试边缘情况,例如从数据库中删除数据的情况,或者是否没有返回数据。

例如

// Happy tests:
Mock.Setup for GetLookupData() => return FetchRealDataHere();
Assert.AreEqual(3, Mock.Object.CountOfSizes()); // Ensure that Small, Medium and Large
... Do Good scenario unit Tests here

// Test Edge cases / destructive tests
Mock.Setup for GetLookupData() => return new Collection() [{ Small, 1}] [{ Medium 2}] -   // But omit large
... Exception case Unit tests here, e.g. Try and Insert a Large product here.

// Test empty collection
Mock.Setup for GetLookupData() => return new Collection() [Empty]
//  Assert that "NoItemsFoundException" was thrown by your logic here

// Handle empty collection
Mock.Setup for GetLookupData() => return new Collection() [Empty]

编辑我已经为下面的更新评论更新了伪模拟设置/单元测试代码。

于 2012-08-24T11:41:00.167 回答
0

单元测试的主要思想是,您不需要整个数据来测试您的逻辑。您正在寻找一些代表不同案例的数据,并证明这些案例的逻辑。就这样。但是,通过单元测试,您不是在测试数据,而是在测试程序逻辑。

于 2012-08-24T11:36:18.693 回答