2017-07-03 65 views
0

我在void方法将下面的代码ClassUnderTest单元测试 - 线Coverage

public void doSomething(){ 

    A a = new A(); 
    a.setAb("b"); 
    a.setAc("c"); 

    persistantObject.commitObj(a); 
} 

我知道如何写路过的JUnit,不过,我想不通如何获得100%的线路覆盖率。

我已经尝试以下

@Mock 
private PersistantObject mockPersistantObject; 
public void testDoSomething(){ 

    EasyMock.createMock(this); 
    ClassUnderTest classUnderTest = new ClassUnderTest(); 
    ReflectionTestUtils.setField(classUnderTest, "persistantObject", mockPersistantObject); 

    A a = new A(); 
    a.setAb("b"); 
    a.setAc("c"); 

    mockPersistantObject.commitObj(a); 
    EasyMock.expectLastCall(); 

    EasyMock.replay(this); 
    classUnderTest.doSomething(); 
    ... 
    EasyMock.verify(this); 
} 
+1

你只想让你的'doSomething'方法具有100%的线覆盖率? – rafaelim

+0

你有兄弟!是!也可能是PIT覆盖率! –

+0

我在这里做了一些编码,我在这里得到了'doSomething'方法的100%线路覆盖率。你的测试没有涵盖哪条线? – rafaelim

回答

0

单元测试是线覆盖。

UnitTesting约要求覆盖。

线路覆盖范围只是一种工具,可以让您了解已经实施的多少需求。

所以不要太在意你的测试覆盖的LOCS但在你要求,需要你的切割一定行为寻找行为并检查是否由一个测试覆盖。


此外,UnitTests不关心LoC的另一个原因:LoCs在重构和演化应用程序过程中可能会发生变化。因此,为增加线路覆盖率所做的任何努力都可能导致突破性测试或阻止所需的更改(取决于您对测试的信心和/或技能)。但是Unittests只会在行为发生变化时失败,而不是执行它的代码。

+0

是的.Jenkins版本的设置是为了让Junits检入必须通过某一行和PIT突变覆盖。这项要求来自DevOps,而不是我! –

+0

*“必须通过某一行和PIT突变覆盖率,这一要求来自DevOps”*他们期望的价值是什么?我发现通过TDD可以轻松获得85%以上的成绩。 –

+0

“85%+”是指LoC还是PIT?方法代码相当大,并且已经提前实施。我正在尝试将JUnit添加到它。除了重新开展工作之外,是否有更直接的解决方案解决这个问题? –