JUnit测试if else case

时间:2016-10-27 06:52:47

标签: java testing junit junit4 android-testing

如何将测试写入当前方法?我使用jUnit 4。

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

2 个答案:

答案 0 :(得分:4)

您需要编写两个测试来涵盖以下两种情况:

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
    }
}

答案 1 :(得分:1)

好的......你写这个方法的方式有一个缺陷。有一种叫做可测试的代码。这是一个讨论可测试代码的链接(how to write testable code and why it matters)。

您在上面写的方法是非确定性的。这意味着该方法可以在不同的运行中表现出不同的行为,即使它具有相同的输入。在你的情况下,你没有输入。

目前,您的原始方法基于方法的环境而不是输入。这种做法可能会使代码难以编写,在某些情况下无法为您的代码编写适当的测试。

所以这就是你想要它的样子......

  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对象。