JUnit 测试 if else 情况

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

好的...您编写此方法的方式存在缺陷。有一种叫做可测试代码的东西。这是讨论可测试代码的 link (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 对象。