Junit未涵盖2分支的eclemma 1

时间:2015-05-13 23:22:32

标签: java junit eclemma

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测试既传递了,但为什么它没有被覆盖)?

1 个答案:

答案 0 :(得分:1)

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