模拟方法调用结果的(单元)测试真的有效吗?
Is a (unit) test that mocks the result of a method call really valid?
我为控制器创建了一个测试方法,但我不确定该测试是否真的有效。
在控制器内部有一个方法调用 returns 一个对象,其中一个属性是 XML 字符串。
我想测试 XML 是否包含特定标记,因此我用 xml 创建了一个文本文件并模拟了方法调用设置,结果 xml 从文本文件中读取,然后我断言想要的标签在那里。
所以我的问题是,如果真正的方法调用发生变化并停止使用我想要的标签返回正确的 XML,我的测试会失败还是继续通过?
你的测试当然会一直通过。但是单元测试的重点是测试一个单元的代码。在您的情况下,您正在测试控制器操作。特别是你正在测试:
//Prepare
When my inner method returns some valid XML that I expect and the correct tag is present there.
//Act
Call the method
//Assert
Assert that my controller action will return status 200 OK (or similar)
您没有在调用的方法内部测试逻辑。这种测试称为集成测试。在这些测试中,您正在测试 2 个组件如何相互集成。
我为控制器创建了一个测试方法,但我不确定该测试是否真的有效。
在控制器内部有一个方法调用 returns 一个对象,其中一个属性是 XML 字符串。
我想测试 XML 是否包含特定标记,因此我用 xml 创建了一个文本文件并模拟了方法调用设置,结果 xml 从文本文件中读取,然后我断言想要的标签在那里。
所以我的问题是,如果真正的方法调用发生变化并停止使用我想要的标签返回正确的 XML,我的测试会失败还是继续通过?
你的测试当然会一直通过。但是单元测试的重点是测试一个单元的代码。在您的情况下,您正在测试控制器操作。特别是你正在测试:
//Prepare
When my inner method returns some valid XML that I expect and the correct tag is present there.
//Act
Call the method
//Assert
Assert that my controller action will return status 200 OK (or similar)
您没有在调用的方法内部测试逻辑。这种测试称为集成测试。在这些测试中,您正在测试 2 个组件如何相互集成。