JUnit在同一对象中使用其他方法的Test方法

kuk*_*384 5 java testing tdd junit mocking

您好我正在努力解决简单的问题.

大概的概念:

class Foo(){
  public boolean method1();
  public String method2();
  public String method3();
  public String shortcut(){
    return (method1() == true) ? method2() : method3();
  }
}
Run Code Online (Sandbox Code Playgroud)

我该如何测试快捷方式?

我知道如何模拟使用其他对象的对象和测试方法.样品:

class Car{
  public boolean start(){};
  public boolean stop(){};
  public boolean drive(int km){};
}
class CarAutoPilot(){
  public boolean hasGotExternalDevicesAttached(){
     //Hardware specific func and api calls
     //check if gps is available 
     //check if speaker is on
     //check if display is on 
  }
  public boolean drive(Car car, int km){
    //drive
    boolean found = hasGotExternalDevicesAttached();
    boolean start = c.start();
    boolean drive = c.drive(km);
    boolean stop = c.stop();
    return (found && start && drive && stop) == true;   
  }
}

class CarAutoPilotTest(){
   @Test
   public void shouldDriveTenKm(){
     Car carMock = EasyMock.Create(Car.class);
     EasyMock.expect(carMock.start()).andReturns(true);
     EasyMock.expect(carMock.drive()).andReturns(true);
     EasyMock.expect(carMock.stop()).andReturns(true);
     EasyMock.reply(carMock);     

     CarAutoPilot cap = new CarAutoPilot();
     boolean result = cap.drive(cap,10);
     Assert.assertTrue(result);
     EasyMock.verify(carMock);
   }
}
Run Code Online (Sandbox Code Playgroud)

但是hasGotExternalDevicesAttached()方法怎么样?这只是样本不真实的情况.我该如何测试驱动方法?我还应该模拟hasGotExternalDevicesAttached函数吗?

我可以模拟正在测试的课程吗?

The*_*ail 3

您可以创建一个子类CarAutoPilot并在其中重写 hasGotExternalDevicesAttached()子类,并使用该子类的实例运行测试。

您可以内联执行此操作:

CarAutoPilot cap = new CarAutoPilot() {
    public boolean hasGotExternalDevicesAttached(){
        // return true or false depending on what you want to test
    }
};
Run Code Online (Sandbox Code Playgroud)

这样您就可以为其余部分创建有效的单元测试CarAutoPilot行为创建有效的单元测试。

如果你愿意的话,你可以称这是穷人的部分嘲笑:-)