unit-testing - 如何对业务规则进行单元测试?

标签 unit-testing business-rules

我需要一个单元测试来确保我正确地累积休假时间。但是休假时间是根据业务规则累积的,如果规则发生变化,那么单元测试就会中断。

这是可以接受的吗?我是否应该通过一个方法公开规则,然后从我的代码和我的测试中调用该方法以确保单元测试不是那么脆弱?

我的问题是:对可能发生变化的业务规则进行单元测试的正确方法是什么?

最佳答案

您的测试应确保代码正确遵守业务规则。因此,我不会编写围绕业务规则或依赖业务规则代码本身的测试。相反,当业务规则发生变化时,我会首先更改测试以反射(reflect)新的业务规则,然后当我的代码不再通过测试时,再去修复代码,使其通过测试。

您不希望发生的是编写您的测试,以便当您更改应用相同业务规则的方式时,您的测试会中断。这说起来容易做起来难,但本质上,您要测试的是实现规则所需的最低限度,而不会过于狭隘地规定代码的实现方式。但是,如果规则的结果不同,那么您应该先更改测试,然后再更改与之匹配的代码。

您也不希望测试与特定数据耦合。假设在进行税收计算时,您的测试不应假设被测类使用 5% 作为税收。相反,您应该编写测试以提供税收百分比,然后检查计算是否正确完成。据推测,您将有一系列值进行测试,以确保也能捕获超出范围的值。这样做的结果之一是您将拥有更好的设计,因为这将帮助您避免硬编码值并使您的生产代码更灵活地应对数据更改。

关于unit-testing - 如何对业务规则进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1016167/

相关文章:

unit-testing - MTM 编码 UI 测试手动执行 : "Recording Not Found"

unit-testing - 用于单元测试的模拟 SSL HttpRequest

java - 在 Calendar.getInstance() 模拟中获取 NotAMockException

design-patterns - MVC 中的业务逻辑

流口水 drl 如何做没有条件

asp.net-mvc - MVC中的业务规则在哪里

c++ - 如何进行单元测试(使用 CMake 和 GTest)来了解测试数据的文件夹在哪里?

Angular2 单元测试 - 未触发 MdCheckbox 中的更改事件

architecture - 如何在 DDD + CQRS + Event Sourcing 方法中处理业务规则?

c++ - 基于规则的设计