c# - 我应该断言验证方法已执行吗?

标签 c# unit-testing moq

我对正在为现有代码编写的单元测试有疑问。

在代码中完成了一些输入验证。验证代码位于单独的类中,因此测试中的代码调用 ComponentValidator.Validate(request)

问题是:我应该对被测代码中调用的 validate 方法(在 ComponentValidator 类上)进行单元测试吗?

我不知道该怎么想:一部分说“是的,这很重要,所以检查一下”,另一部分说“不,你不应该测试每一行代码该方法会执行,因为这样我就与单元测试中的实现有很大的联系

如果没有,问题到此结束,但如果我应该,有没有办法检查调用是否在我的单元测试中进行,而不需要为验证器创建接口(interface)并模拟它?

我知道我可以为验证器创建一个接口(interface),将其注入(inject)类中并在测试期间使用模拟对象(我正在使用 Moq),但我并不总是想这样做。

最佳答案

正如您所说,验证器是在单独的单元测试中进行测试的,您可以假设验证器工作正常。

假设验证器工作正常,我不认为您需要测试验证器是否被正确调用。考虑以下问题以及您会采取什么措施:

“我对 Console.WriteLine() 方法进行了单元测试,我应该测试它是否被正确调用”

从我的角度来看,您通过测试验证器是否被调用太过深入了。对调用验证器的模块进行单元测试应该测试该模块的目的是否得到满足。如果每个子调用都正确进行,则不会。

编辑:当然,答案还取决于您要测试的单元。也许如果您可以将单位粘贴到此处,会更容易提供更准确的答案

关于c# - 我应该断言验证方法已执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17876034/

相关文章:

c# - 告诉 C# 变量具有接口(interface)的属性

c# - 是否可以模拟数据库事务参数?

c# - 测试在最小起订量中多次调用的方法

unit-testing - Nock拦截请求但返回空对象

android - 如何测试 "Rate my App"功能?

c# - 如何在没有默认构造函数的情况下模拟对象上的方法?

c# - 如何在 C# 中使用反射向字典添加值?

c# - 最好只对内部的静态字段使用类或结构

c# - 将 NuGet 包替换为本地 dll 文件

c++ - kill syscommand 在 Catch2 测试用例中产生失败