2017-07-03 92 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添加到它。除了重新開展工作之外,是否有更直接的解決方案解決這個問題? –