2017-05-31 72 views
2

我目前正在學習如何實現JUnit測試,並且我正在爲我的Stack實現而苦惱isEmpty()方法。這是我要測試的方法:JUnit測試isEmpty()堆棧方法

boolean isEmpty(){ 
    if(firstFree == 0) return true; 
    else return false; 
} 

這是我的測試:

public void isEmptyTest(){ 
    assertTrue(onpStack.isEmpty()); 
    assertFalse(onpStack.isEmpty()); 
} 

沒有區別,如果堆棧已得到元素或不 - 的測試總是失敗。我知道爲什麼:因爲它不能在同一時間有元素。我無法弄清楚在這兩種情況下如何使測試通過。有沒有合適的方法?或者我應該爲這個isEmpty()方法做兩個不同的測試?

+0

是的,您應該爲每個預期產出進行單獨的單元測試。 –

+1

你應該有一個單獨的測試每個條件分支..如果(firstFree == 0)在你的情況..這就是單元測試的基本原理和爲什麼他們被稱爲這樣的方式 –

+0

@MaciejKowalski這就是我的想法。另一個問題是,在測試期間我應該忽略其中的一個嗎? – soommy12

回答

7

單元測試顧名思義就是測試代碼的測試部分。堆棧不能同時爲空且不爲空。由於幾個建議的,請分離出你的測試用例如下

public void isEmptyTest(){ 
    Stack emptyStack = new Stack(); 
    assertFalse(emptyStack.isEmpty()); 
} 

public void isEmptyTest(){ 
    Stack nonEmptyStack = new Stack(); 
    nonEmptyStack.push(1); 
    assertFalse(nonEmptyStack.isEmpty()); 
} 

我也建議用短手爲您的isEmpty()方法,以使代碼更清潔和更容易理解

boolean isEmpty(){ 
    return (firstFree == 0); 
} 

。希望幫助!

+0

好吧,聽起來合法。在測試中初始化對象是一個好方法? – soommy12

+0

@Buszman這是測試的要點:你首先要做的是準確的**設置,然後運行測試。你還想在哪裏準備你的測試? – GhostCat

+0

@GhostCat我從教程中學習瞭如何設置在SetUp()方法中測試的變量,然後標記或簡單地初始化類中的元素,這就是爲什麼我要求 – soommy12

0
  1. 對於第一種情況,使用空的堆棧對象來測試isEmpty()方法返回true。

  2. 對於第二種情況,使用非空棧對象來測試isEmpty()方法返回false。

+0

這就是我發佈這個問題之前已經完成的工作。我想在一次測試中做出這兩件事情,並且很好奇,如果這是可能的 – soommy12

+0

我想測試方法。如果你想檢查堆棧空虛,我會在代碼中使用方法本身:O – soommy12