1
所以我有一個階級結構設置,像這樣:如何JUnit測試與內部對象創建
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管理豆。他們從數據庫中提取有關用戶的所有信息並將其存儲到對象中。在上面的例子中,當用戶登錄的飛機列表是從他們從數據庫中提取的信息中填充的。
我的問題是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。
我正在研究嘲笑或ArgumentCaptor,但我是JUnit測試的新手,並不真正瞭解這些工作是如何工作的,或者他們是否能夠幫助我解決問題。有關如何解決此問題的任何想法?
什麼是any()調用,因爲我得到一個語法錯誤。 – Richard
any()是Mockito的一個靜態方法,說任何事情都可以通過該參數。你得到一個語法錯誤b/c它需要傳遞該參數的類,所以它應該是'any(Car.class))'。 Matchers上的文檔:https://mockito.googlecode.com/hg-history/1.6/javadoc/org/mockito/Matchers.html – emerssso