有一点背景,我遇到的情况是我无法启用断言(问here)并且使用像forceassertions这样的好解决方案对我来说是不可能的,因为{ {3}}。
在开发和测试阶段,断言一直是我们的一个强大武器,我们不准备放手。
在这种情况下,我想到了两个选项。 第一个,就像JUnit的Assert类:
Assert.assertTrue(result.financialInfoDTO.getPeriods().size() <= FinancialInfoConstants.NUMBER_OF_VISIBLE_PERIOD);
第二,尝试模仿Java的本机断言关键字行为,我们可以在其中启用或禁用它:
Assert.assert(new Assertion() {
public boolean doAssert() { return result.financialInfoDTO.getPeriods().size() <= FinancialInfoConstants.NUMBER_OF_VISIBLE_PERIOD; }
});
我希望能够启用和禁用断言功能,只有我能想到的解决方案就像后者一样。我要问的是,鉴于大多数断言都是比较集合的大小和比较某种类型的值,我们最好使用第一个选项还是后者?
将其置于更具技术性的环境中,哪种更有效?评估简单表达式或始终在堆中创建新对象?
答案 0 :(得分:2)
对象实例化通常更昂贵。你可以自己做基准测试。
答案 1 :(得分:1)
我会选择选项1。
它阻止了创建一个新的匿名类和 每次传递代码时都会对此对象进行实例化。
使用第二个选项即可访问对象
(result
)在断言类之外定义。
这是第一个原因,难道你不认为第一个更具可读性吗?