0

我是测试新手,刚刚开始测试我的 MVC 应用程序。

目前我正在测试我的控制器的操作方法是否正在调用正确的存储库方法,而这些存储库方法又会从数据库中读取或写入数据。

我还在测试的是操作方法的返回类型是否为View,PartialViewRedirectToRoute, 等等。

我有一些评论说测试控制器的 Action 方法是否在存储库中调用了正确的函数并没有真正的意义。这是真的吗?

我应该在我的 MVC 应用程序的单元测试中包含什么,它也使用存储库模式。

4

3 回答 3

1

检查您的操作是否在存储库上调用了正确的方法可能很有意义,但您需要模拟它以避免访问数据库。单元测试应该与外部组件隔离。

虽然它并不理想,但您可以用内存中的轻量级 Sqlite 替换您的“真实”数据库,以避免在测试中模拟您的数据库访问。

我个人Moq用作模拟框架,但它是 .NET 的大量成熟模拟框架。

考虑到测试是否调用方法会检查行为而不是状态。这使得测试变得更加脆弱,因为它依赖于内部实现,但根据您的场景,它可能是完全有效的。

于 2013-08-16T13:37:25.130 回答
0

这取决于不同的场景,例如,在控制器中,您有一个 Action bool SaveEmployee(),它在内部调用、服务,然后是要保存的数据库层。因此,测试 Emp 是否实际保存在 db 中没有意义,因为它应该在对应数据库层函数的另一个单元测试中。在这里,您只需要在成功、失败、重复或抛出一些异常后验证状态。您可以简单地模拟函数并返回 bool 或字符串(如 Success,视情况而定)并使用预期输出验证实际输出。

于 2013-08-16T20:13:44.637 回答
0

单元测试是关于孤立地测试组件的行为,这意味着在测试特定组件时,该组件不会与任何外部组件交互。

通常,这样做的方法是使用模拟。您的所有依赖项都必须是模拟的,以便您可以控制它们。测试一个方法是否被调用是有效的。如果逻辑不在您测试的组件上,那么您的工作就完成了。在另一种情况下,您的组件调用一个函数和情况 x、y 和 z。行为好吗?那已经足够好了。

如果你因为有数据库依赖而难以测试,那通常是设计问题。通常,这是通过在数据库前面使用数据库抽象来解决的,它唯一的工作是从数据库中调用和返回值。该抽象可以模拟并注入您测试的类中。这样,您甚至可以将预配置的值返回给您的测试类并继续该过程。

于 2013-08-16T15:12:56.083 回答