2016-10-17 98 views
2

我正在嘗試爲我的方法創建一些JUnit測試,並且我被告知需要爲每個方法執行測試。我知道這對於初學者來說只是做一些積極的測試是一個陷阱,那麼我怎麼能比我已經有的測試這個方法呢?同樣,我的兩種測試方法都基本上測試相同的東西。這將是一個負面測試的例子,或者是多餘的工作?Junit整個或冗餘測試? (基本)

public static MemberCont getInstance() { 
    if(instance == null) { 
     instance = new MemberCont(); 
    } 
    return instance; 
} 

@Test 
public void getInstance() { 
    assertNotNull(memberCo1.getInstance()); 
    assertEquals(true, memberCo1.getInstance() != null); 
} 
+0

_「我想創造我的方法的一些JUnit測試,並有人​​告訴我這樣做對每個單獨的方法。 「_這是一個不好的建議,你應該爲每一個**行爲創建單元測試**。 –

+0

你寫的測試就足夠了。您正在測試的方法不應該有其他行爲 - 您將返回實例引用。 – duffymo

+0

您的受測試類實現了_「Java Singelton模式」_這也是一種誤解。 –

回答

0

單元測試要始終代表它們的結構是三個部分:安排行爲斷言。同樣,每個期望的行爲都應該有自己的測試。因此,您的測試應該LILE本(基於@NicolasFilotto的答案):

@Test 
public void getInstance__singleCall__NotNull() { 
    // no "arrange" possible 
    // act 
    MemberCont cut = MemberCont.getInstance(); 
    // assert 
    assertNotNull(cut); 
} 

@Test 
public void getInstance__multipleCalls__alwaysTheSameObject() { 
    // no "arrange possible 
    MemberCont cut1 = MemberCont.getInstance(); 
    MemberCont cut2 = MemberCont.getInstance(); 
    assertTrue(cut1 == cut2); 
} 
2

你顯然試圖實現Singleton Pattern(這是不正確寫入BTW,檢查this),所以最重要的是要測試的是你永遠得到完全相同的情況下,所以你應該測試,而類似這樣:

@Test 
public void getInstance() { 
    assertNotNull(MemberCont.getInstance()); 
    // Make sure that we get the same instance between 2 subsequent calls 
    assertSame(MemberCont.getInstance(), MemberCont.getInstance()); 
} 

注:這是一個static方法,因此您不需要使用實例來調用它,只需像上面那樣直接使用類名來調用它。