【发布时间】:2015-10-15 13:23:14
【问题描述】:
所以我有一个这样的类结构设置:
public class foo {
private DomainService service;
//constructor to initialize
public Fleet someMethod(Car car) {
Fleet fleet = new Fleet();
if(car!=null) {
Plane plane = service.findObjectByID(car);
plane.setColor(Blue);
fleet.addPlane(plane);
}
return fleet;
}
}
public class DomainService {
List<Plane> planes;
//constructure to initialize
public Optional<Plane> findObjectByID(Car car) {
for(Plane plane : planes) {
if(plane.getID() == car.getID()) {
return Optional.of(plane);
}
}
return Optional.absent();
}
}
public class Fleet {
List<Plane> planes;
int ID;
Date serviceDate;
}
当用户登录应用程序时,有很多操作和计算是通过 Spring 托管的 bean 发生的。他们从数据库中提取有关用户的所有信息并将其存储到对象中。在上面的示例中,当用户登录时,飞机列表是根据从数据库中提取的信息填充的。
我的问题是 JUnit 测试这个。我的 JUnit 看起来像这样:
public class fooTest {
private Foo foo;
private Car car;
@Before
public void setUp() throws Exception {
foo = new Foo();
}
@Test
public void isBlue() {
car = new Car;
car.setID(123);
Fleet result = foo.someMethod(car);
assertEquals(Color.BLUE, result.getColor());
}
}
问题是当用户首次登录时,平面对象会被初始化,包括平面 ID。哪些是真实世界的 ID,它们是一串随机数字和字符。由于这是一次测试,飞机上并没有装满任何真实的东西。即使它填充了真实世界的数据,我也不知道将其设置为什么 ID,因为它们是随机的。
所以每次我尝试执行这个 JUnit 时都会失败,因为 findObjectByID 总是返回 null。
我正在研究 mocking 或 ArgumentCaptor,但我是 JUnit 测试的新手,我真的不知道它们是如何工作的,或者它们是否可以帮助我的情况。有关如何解决此问题的任何想法?
【问题讨论】:
标签: java testing junit mocking mockito