簡體   English   中英

JUnit測試其他情況

[英]JUnit test if else case

如何寫測試到當前方法? 我使用的是jUnit 4。

   public void setImage() {
        if(conditionOne){
            myView.setImageOne();
        } else {
            myView.setImageTwo();
        }
    }

您需要編寫兩個測試來涵蓋以下兩種情況:

import org.junit.Test;

public class SetImageTest {

    @Test
    public void testSetImageForConditionOne() {
        //write test to make conditionOne true
    }

    @Test
    public void testSetImageForElseCondition() {
        //write test to make conditionOne false
    }
}

好的,您編寫此方法的方式存在缺陷。 有一種叫做可測試的代碼。 這是討論可測試代碼的鏈接( 如何編寫可測試代碼以及​​為什么如此重要 )。

您上面編寫的方法是不確定的。 這意味着該方法即使在輸入相同的情況下,在不同的運行過程中仍可能表現出不同的行為。 在您的情況下,您沒有輸入。

當前,您的原始方法基於方法的環境,而不是輸入。 這種做法可能非常困難,在某些情況下甚至不可能為您的代碼編寫適當的測試。

所以這就是您想要的樣子...

  public void setImage(boolean conditionOne) {
    if(conditionOne){
        myView.setImageOne();
    } else {
        myView.setImageTwo();
    }
}

既然測試是確定性的,那么您要么必須測試環境中的變量,要么具有return語句。

因此(添加return語句),您可以執行此操作。

  public static void setImage(boolean conditionOne, type myView) {
    if(conditionOne){
        myView.setImageOne();
    } else {
        myView.setImageTwo();
    }
    return myView; 
  }

現在您的測試可以看起來像這樣

public class SetImageTest {
  @Test
  public void testSetImage() {
    type myViewOrig;
    //define myViewOrig
    type myView1;
    //define myView1
    type myView2;
    //define myView2

    assertEquals(setImage(<true>, type myViewOrig), myView1);
    assertEquals(setImage(<false>, type myViewOrig), myView2);
  }
}

或者,您可以在運行setImage方法后僅測試myView對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM