【问题标题】:Java Unit Testing on confusing method关于混淆方法的Java单元测试
【发布时间】:2015-11-06 09:32:00
【问题描述】:

我正在对 Java Period 类的方法进行单元测试。方法 minusDays 如下所示:

public Period minusDays(long daysToSubtract) {
    return (daysToSubtract == Long.MIN_VALUE ? plusDays(Long.MAX_VALUE).plusDays(1) : plusDays(-daysToSubtract));

我的单元测试如下所示:

@Test
public void testMinusDays ()
{
Period x = Period.of(1,1,2);
Period y = Period.of(1,1,1);

Assert.assertEquals(y, x.minusDays(1));
}

问题是我得到了 50% 的分支覆盖率并且不知道我正在测试 if else 的哪些部分,因为我无法遵循它。

【问题讨论】:

  • 如果问题已解决,请不要“破坏”您的问题。只需接受帮助您解决问题的答案即可。如果当前的答案没有帮助,或者自己写一个答案。

标签: java unit-testing junit


【解决方案1】:

第一步:如果? : 太混乱,将其替换为相等的if 条件:

public Period minusDays(long daysToSubtract) {
    if (daysToSubtract == Long.MIN_VALUE)  {
        return plusDays(Long.MAX_VALUE).plusDays(1);
    }
    return plusDays(-daysToSubtract);
}

现在您知道自己缺少什么了。您正在测试daysToSubtract == 1,但不是daysToSubtract == Long.MIN_VALUE 的可能性,换句话说,您只测试了两种情况之一,占50%。

【讨论】:

  • 即使不提高代码的可读性,通过简单的逻辑,只执行一个测试是不可能覆盖所有分支的。如果你有两个分支,你需要两个测试。
  • 没错,但对我来说,主要问题似乎是 NoName 博士忽略了一个简单的事实,即实际上有两个分支,因此提高可读性可能会有所帮助,尤其是。对于不熟悉的用户? : 声明。
【解决方案2】:

您必须使用 x.minusDay(Long.MIN_VALUE) 编写一个测试,并使用另一个值编写一个测试。之后你应该有 100%

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 2011-05-31
    • 2014-01-13
    • 1970-01-01
    相关资源
    最近更新 更多