1

JUnit 文件

public class SomeClassTest {
    ...
    @Test
    public void testSomeContextFailure() throws Exception {
        SomeClass sc = new SomeClass();
        try {
            sc.SomeContext(null,null);
            fail("IllegalArg expected");
        } catch (IllegalArgumentException e) {}
    }

    @Test
    public void testSomeContextSuccess() throws Exception {
        SomeClass sc = new SomeClass();
        SomeContext in = new SomeContext();
        in.setName("something");
        in.setId("5");
        in.setPoints(SomePoint.X);
        try {
            assertNotNull(sc.SomeContext(in,null));
        } catch (Exception e) {}
    }
}

Java 文件

public class SomeClassTest {
    @Autowired(required = true)
    private InsuredDAO insuredDAO;

    @Override
    public context SomeContext(context c, unused u) throws Exception {
        if(c == null)
            throw new IllegalArgumentException();

        insuredDAO.increaseValue(c);
        if(c.getPoints() != null) {
            ...do something
        }
        return c;
}

在 java 文件if(c == null)中以黄色突出显示,消息说 2 个分支中的 1 个未覆盖。

throw new IllegalArgumentException();

突出显示的绿色

insuredDAO.increaseValue(c); 

这条线上下的所有东西都是红色的

我错过了什么?(两者都通过了 JUnit 测试,但为什么不包括在内)?

4

1 回答 1

1

可能有点太晚了,但是如果其他人遇到这个......
首先:
您有两个测试,其中一个失败了。作为唯一通过的测试“null”值,eclemma 将 if 语句标记为“部分覆盖”。-> 空检查已经过测试,但是对于给定的对象,它不是。
它不像调试器那样工作“测试一直运行到这一行,然后它失败了,但是它在这个阶段之前所做的一切都会被分析”。eclemma 只是分析完全运行(和成功)的测试。
第二:
在您的班级中,您有insuredDAO.increaseValue(c);,这是自动装配的。在我的测试中,我必须模拟这个对象,否则它将NullPointerException在该行失败,因为在 junit 测试中没有完成自动装配,insuredDAONullPointerException.
不过,应该已经在您的 IDE 中弹出;)

于 2015-08-19T11:08:50.690 回答