Car
オブジェクトを作成し、CarDao
を保存するメソッドをテストする必要がありますそれはデータベースにあります。別の方法ではCar
オブジェクトが作成されますが、CarDao
が模擬の場合は、car.getUser()
はUser
オブジェクトの代わりにnull
オブジェクトを返します。これは私のコードです。Mockito.when(...)。doReturn(...)がMockito.doAnswer(...)から呼び出されたときに期待通りに機能しない理由
Mockito.doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocationOnMock) throws Throwable {
lastCarId++;
Car car = (Car) invocationOnMock.getArguments()[0];
// here car.getUser() returns correct user object
car.setId(lastCarId);
Mockito.when(carDao.getById(car.getId())).thenReturn(car);
return null;
}
}).when(carDao).persist(Mockito.any());
なぜcarDao.getById(carId).getUser()
がnullを返しますか?そして、正確なuser
フィールド値を持つ完全なオブジェクトを取得するために必要なことは?
carDao
使用更新:以下
Car car = carService.create("car name1", "color", "year", user); // in this method called carDao.persist(...);
car.setColor("color2");
carService.findById(car.getId());
// this method calls carDao.getById(carId)
// and comapres with authenticated user ID.
// But carDao.getById(carId) returns car with user == null
コードがNullPointerExceptionがスローCarService
クラスの一部です。
// carService.findById(...) method
public Car findById(Car id) {
Car car = carDao.getById(id);
User carUser = car.getUser(); // returns null
User currentUser = accountService.getAuthenticatedUser(); // returns correct user object
if (!carUser.getId().equals(currentUser.getId())) { // throws NullPointerException
return null;
}
return car;
}
ありがとうございます。
あなたの 'car'オブジェクトは' invocationOnMock.getArguments()[0]; 'から取得したものですか?そうでない場合は、なぜそれがnullであるかを確認する必要があります – Draken
@Draken、Yes '' ''オブジェクトは '' invocationOnMock.getArguments()[0];から取得した 'car'オブジェクトに設定されます –
' carDao.getById(carId).getUser() 'プロパティ?それが呼ばれているあなたのセクションを見ることができますか? – Draken