我们将在下一个项目中实施TDD方法。所以我一直在使用ASP.NET Core中的NUnit进行单元测试。因为我是新手,所以我对一些事感到困惑。因此,我想与您分享这些问题,以便根据专家意见做出决定。
请帮我找到这些问题的答案。可能是这样,有些问题是相似的,但是,我不想删除它们以便更好地理解你们。感谢。
答案 0 :(得分:5)
对所有这些都有各种各样的意见,所以我认为你很难得到任何明确的答案。也就是说,我个人认为内存数据库可以用于单元测试。有些人认为,当你在EF中使用内存数据库时,它会进行技术上的集成测试,因为你实际上涉及所有的EF机器。但是,我有两点反对这个理论:1)它在内存中,因此实际上并不是一个真实的集成测试(因为你显然没有在生产中使用内存数据库)和2)它与创建一个从内存中的一些集合中返回数据的复杂模拟之间没有什么区别。
因此,我认为在EF中使用内存数据库提供程序进行单元测试是完全正常的。它只是节省了你不得不支持模拟的时间,这对于像嘲笑像EF这样的ORM这样的事情来说非常重要。但是,它也有自己的包袱,所以如果您正在测试一种本质上依赖EF的方法,我建议您这样做。例如,如果它是一个将EF上下文注入的类,并且您正在测试依赖于该方法的方法,则是,使用内存提供程序并注入实际上下文。但是,如果您只是测试一个对传递给它的某些任意数据集进行操作的方法,那么只需使用文本夹具,而不是引导EF上下文,只是为了提取一些数据为方法提供的。
就集成测试而言,它实际上取决于您正在测试的内容。即使按定义进行集成测试涉及多个不同的组件,您仍然应该尽可能地限制测试的范围。因此,如果您正在执行测试操作结果之类的操作,那么您将使用内存数据库,因为您关注的是结果,而不是与数据库的连接有效正确。但是,如果您的集成测试实际上是在考虑与数据库相关的集成,那么您最好模拟真实连接以确保连接字符串之类的内容正确无误。但是,最重要的是,你应该使用内存提供程序进行大多数事情的集成测试。