哪一个更好,对象创建或简单表达评估?

时间:2011-10-18 03:33:45

标签: java junit

有一点背景,我遇到的情况是我无法启用断言(问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; }
    });

我希望能够启用和禁用断言功能,只有我能想到的解决方案就像后者一样。我要问的是,鉴于大多数断言都是比较集合的大小和比较某种类型的值,我们最好使用第一个选项还是后者?

将其置于更具技术性的环境中,哪种更有效?评估简单表达式或始终在堆中创建新对象?

2 个答案:

答案 0 :(得分:2)

对象实例化通常更昂贵。你可以自己做基准测试。

答案 1 :(得分:1)

我会选择选项1。

  1. 它阻止了创建一个新的匿名类和 每次传递代码时都会对此对象进行实例化。

  2. 使用第二个选项即可访问对象 (result)在断言类之外定义。

  3. 这是第一个原因,难道你不认为第一个更具可读性吗?