2015-11-06 111 views
0

我正在對Java期間類的方法進行單元測試。該方法minusDays看起來是這樣的:關於混淆方法的Java單元測試

public Period minusDays(long daysToSubtract) { 
    return (daysToSubtract == Long.MIN_VALUE ? plusDays(Long.MAX_VALUE).plusDays(1) : plusDays(-daysToSubtract)); 

我的單元測試是這樣的:

@Test 
public void testMinusDays() 
{ 
Period x = Period.of(1,1,2); 
Period y = Period.of(1,1,1); 

Assert.assertEquals(y, x.minusDays(1)); 
} 

而問題是我得到50%的分支覆蓋,不知道這是否的部分否則我正在測試,因爲我無法遵循它。

+0

http://stackoverflow.com/questions/33536168/test-case-for-100-branch-coverage-with-no-fault? –

+0

如果問題解決了,請不要「摧毀」你的問題。只要接受幫助你解決問題的答案即可。或者如果當前答案沒有幫助,請自己寫答案。 – Tom

回答

1

您必須使用x.minusDay(Long.MIN_VALUE)編寫測試並使用另一個值進行測試。之後,你應該有100%

3

第一步:如果? :是太混亂了,用等if條件改爲:

public Period minusDays(long daysToSubtract) { 
    if (daysToSubtract == Long.MIN_VALUE) { 
     return plusDays(Long.MAX_VALUE).plusDays(1); 
    } 
    return plusDays(-daysToSubtract); 
} 

現在你知道你錯過了什麼。你正在測試daysToSubtract == 1,但不可能daysToSubtract == Long.MIN_VALUE,換句話說,你只測試兩種情況中的一種,這使得50%。

+0

即使沒有提高代碼的可讀性,通過簡單的邏輯,只有一個測試正在執行,覆蓋所有分支是不可能的。如果你有兩個分支,你需要兩個測試。 –

+1

沒錯,但對我來說,似乎主要的問題是,NoName博士錯過了一個簡單的事實,即實際上有兩個分支,所以提高可讀性可能會有所幫助,尤其是,對於那些不熟悉的用戶? :聲明。 –