2分支的eclemma 1未覆盖在JUnit(eclemma 1 of 2 branch not c

2019-10-23 02:46发布

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)强调了黄色用消息说1 2的分支未被覆盖。

throw new IllegalArgumentException();

突出绿色

insuredDAO.increaseValue(c); 

上面和下面的这条线的一切都是红色的

我在想什么? (JUnit测试通过了两个,但为什么它不是盖的)?

Answer 1:

可能有点为时已晚,但如果别人遇到这...
第一:
你有两个测试,其中他们中的一个失败。 作为唯一的测试,即经历了,测试的“空”值,eclemma标志着if语句为“部分覆盖”。 - >空检查进行了测试,但与给定对象,事实并非如此。
它不工作的方式就像一个调试器“测试跑了,直到这条线,那么它失败了,但一切它确实直到这个阶段进行分析。” eclemma只是分析完全运行(和成功)的测试。
第二:
在你的类,你有insuredDAO.increaseValue(c); ,这是自动装配。 在我的测试中我嘲笑这个对象,否则就会以失败NullPointerException ,因为自动装配不JUnit测试完成在该行,因此insuredDAO是零和方法调用将抛出一个NullPointerException
在你的IDE应该弹出,虽然;)



文章来源: eclemma 1 of 2 branch not covered in Junit