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

RAL*_*RAL 5 unit-testing business-rules

我需要进行单元测试,以确保我正在积累假期.但是假期时间根据业务规则累积,如果规则发生变化,则单元测试会中断.

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

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

tva*_*son 5

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

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

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