基于模糊方法的Java单元测试

基于模糊方法的Java单元测试,java,unit-testing,junit,Java,Unit Testing,Junit,我正在对Java Period类的方法进行单元测试。方法如下所示: 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

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

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));
}
我的单元测试如下所示:

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的哪些部分,因为我无法遵循它。

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

您必须使用x.minusDay(Long.MIN_值)编写一个测试,并使用另一个值编写一个测试。在此之后,您应该有100%的第一步:如果
?:太混乱,如果出现以下情况,请用相等的
替换它:

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\u值
,换句话说,您只测试两种情况中的一种,占50%。

第一步:如果
?:太混乱,如果出现以下情况,请用相等的
替换它:

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\u值
,换句话说,你只测试两种情况中的一种,占50%。

?如果问题解决了,请不要“破坏”你的问题。只要接受帮助你解决问题的答案。如果当前的答案都没有帮助,你也可以自己写一个答案?如果问题解决了,请不要“破坏”你的问题。只要接受帮助你解决问题的答案。如果当前的答案都没有帮助,也可以自己写一个答案。即使不提高代码的可读性,通过简单的逻辑,也不可能只执行一个测试就覆盖所有分支。如果你有两个分支,你需要两个测试。是的,但对我来说,主要的问题是,NoName博士忽略了一个简单的事实,即实际上有两个分支,因此提高可读性可能会有所帮助,特别是对于不太熟悉的用户:即使不提高代码的可读性,通过简单的逻辑,也不可能只执行一个测试就覆盖所有分支。如果你有两个分支,你需要两个测试。是的,但对我来说,主要的问题是,NoName博士忽略了一个简单的事实,即实际上有两个分支,因此提高可读性可能会有所帮助,特别是对于不太熟悉的用户:陈述