【问题标题】:How to test an int has been incremented using Junit?如何使用 Junit 测试 int 是否已递增?
【发布时间】:2016-05-24 14:11:58
【问题描述】:

我想测试以下方法,如果Boolean 条件为真,它只会增加int

 public void incrementIfConditionMet(Boolean personCheckedIn) {

    int peopleInHotel=0;

    if (personCheckedIn==true){

         peopleInHotel++

     }

}

我对 Java 中的单元测试非常陌生。我如何unit test this 来检查 int 是否已增加?

【问题讨论】:

  • 除非它是属性或返回值,否则您将如何访问它?您需要将它放在可以访问的地方,例如制作公共 getter 或将其作为返回值
  • 我不确定你的意思,请给出代码示例?
  • 你应该测试类的公共api。如果你有一个 getPeopleInHotel 函数,你应该能够 assertEquals(getPeopleInHotel(), expected);
  • 您的代码按原样递增一个仅在您的方法内的变量。离开该方法后,您的变量将消失,它的值不再重要
  • 你不能测试方法的局部变量。

标签: java unit-testing junit int boolean


【解决方案1】:

目前您的peopleInHotel 值无法在方法外部访问,因为它是在内部创建的。如果您想访问它,您应该执行以下操作:

private int peopleInHotel=0;

public int getPeopleInHotel() {
    return peopleInHotel;
}

public void incrementIfConditionMet(Boolean personCheckedIn) {
    if (personCheckedIn){
         peopleInHotel++
    }
}

现在在你的测试课中,你可以通过调用getPeopleInHotel();来检查

所以测试用例是:

int initalValue = classInstance.getPeopleInHotel();
classInstance.incrementIfConditionMet(true);
assertEquals(classInstance.getPeopleInHotel(), initalValue +1);

这也将解决您在运行方法后不保留值的问题。目前,在您当前的代码设置中,您的变量 peopleInHotel 在您完成该方法后将被丢弃。

【讨论】:

  • 好的,谢谢,但是如何编写测试来检查 int?
  • 在示例中... assertEquals(getPeopleInHotel(), expectedQuantity);如果您不知道如何实现这一点,您应该查看一些教程。在此示例中,您将创建一个实例,调用 incrementIfConditionMet(false),使用 expectedQuantity 0 断言,然后调用 incrementIfConditionMet(true),然后使用 expectedQuentity 1 断言
  • 我已经更新了测试用例,您需要获取之前的值,然后在您运行方法后对照新值进行检查
  • 提示:只有一个断言是一个人真正需要的:assertTrue ...一旦你习惯了那个,你就永远不会回头看任何一个另一个断言。
  • @Jägermeister 为什么你觉得这是唯一被使用的断言?
【解决方案2】:
int peopleInHotel=0;

public void incrementIfConditionMet(Boolean personCheckedIn) {
    if (personCheckedIn==true){

         peopleInHotel++

    }
}

public int getPeopleInHotel() { //test the returned value after you've incremented
    return peopleInHotel;
}

【讨论】:

    【解决方案3】:

    试试这样:

    public class Hotel {
        private int peopleInHotel = 0;
    
        //a constructor...
    
        public int getPeopleInHotel() {
    
            return this.peopleInHotel;
    
        }
    
     public void incrementIfConditionMet(Boolean personCheckedIn) {
          if (personCheckedIn==true){
                 peopleInHotel++
          }
     }
    }
    

    在您的单元测试中,您现在可以执行以下操作:

    //defining your TestCase 
    Hotel hotel = new Hotel();
    int initValue = hotel.getPepleInHotel();
    hotel.incrementIfconditionmet(true);
    assertEquals(hotel.getPeopleInHotel(),initValue+1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多