我如何在junit中测试实例?

时间:2018-09-13 18:20:08

标签: java testing junit

下面是我要测试的代码

  public class EPATestMode {

  public static final int INVALID_MPG = -1; 

  private int odometerAtReset;


  public EPATestMode() {
    odometerAtReset = 0;
  }


  public void resetReadings(int milesDriven) {
    // Use the current mileage as the new baseline
    odometerAtReset = milesDriven;
  }


  public double mpg(int currentOdometer, int gallonsBurnt) {
    if (gallonsBurnt == 0) {
      return INVALID_MPG;
    } else {

      int milesDriven = currentOdometer - odometerAtReset;

      return milesDriven / gallonsBurnt;
    }
  }
}

这是我要在实例变量INvalid MPG上执行的第一个测试用例,但是当我执行此操作时,会出现一条划线“ assertEquals”。对此非常困惑。(JUnit测试的新功能)

@Test
public void testInvalidMpg() {
    EPATestMode MpgTest = new EPATestMode();
    double results=MpgTest.INVALID_MPG;
    assertEquals(results,-1)

}

2 个答案:

答案 0 :(得分:1)

您没有声明您的环境,但是很可能它的行为类似于Eclipse(也许是Eclipse?),因为代码中的一行表明您正在使用不赞成使用的API。在这种情况下,如果您转至Junit API文档,则会发现不赞成使用像您正在调用的double那样的assertEquals,而推荐使用包含增量的double。 API

这个想法是,浮点数本质上是不精确的,因此比较它们充其量是不精确的。您还需要包含一个增量,以便可以指示这些数字可以相距多远并且仍然可以接受。

所以基本上你想要:

assertEquals(results, -1, .000001); // For example.

在旁注中,我了解到您只是想绕开这个头-因此,您可能正在试图提出一个简单的测试以使“某些东西正常工作”。但是像这样的测试-比较类常量以查看是否是您输入的内容-并不是特别有用。我将更倾向于进行测试以确保在“加仑燃烧”中提供0会返回正确的“ INVALID_MPG”常量。

答案 1 :(得分:0)

线交叉表示不赞成使用该方法。 http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertEquals(double,加倍)

下面使用的新方法

public static void assertEquals(应加倍,                                 实际两倍                                 双三角洲

变化量是实际值和预期值之间的差异。