当您为逻辑层编写测试时,您将模拟使用的数据访问层,因为您不希望测试用例彼此依赖。
但查找表怎么样? 假设您有一个逻辑,根据大小表中的大小来计算值:
小1 中2 大3
现在,你在测试中以某种方式嘲笑这张桌子吗?使用字典为例?当表更改时(一个真实的配置表将包含数百个值,有时不会以简单的键值形式)如何保持代码和表不同步?
或您弯曲此规则...并直接从数据库获取值? 但如果明天我改变了数据源怎么办?或者我无法以某种方式访问数据库?是不是应该在任何条件下运行的测试用例?
什么是最好的方法?
答案 0 :(得分:1)
我仍然会模拟查找表,即使对于“快乐”测试场景,您只需返回从数据库返回的实际数据。
但是你可以灵活地测试边缘情况,例如:数据已从数据库中删除,或者没有返回数据。
e.g。
// 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]
编辑我已经更新了下面更新评论的伪模拟设置/单元测试代码。
答案 1 :(得分:0)
单元测试的主要思想是,您不需要整个数据来测试您的逻辑。您正在寻找代表不同情况的一些数据,并证明了这种情况的逻辑。就这样。但是,通过单元测试,您不是测试数据,而是测试程序逻辑。