Предполагая, что у меня есть этот репозиторий
@Repository public class GenericHistoryRepositoryImpl implements GenericHistoryRepository {
@Autowired private MongoTemplate mongoTemplate;
@Override public Historiable create(Historiable historiableObject, String collectionName) {
mongoTemplate.save(historiableObject, collectionName);
return historiableObject; }
@Override public <T extends Historiable> T get(String id, Class<T> collectionClass, String collectionName) {
Query query = new Query();
query.addCriteria(Criteria.where("id").is(id));
return mongoTemplate.findOne(query, collectionClass, collectionName);
} }
И у меня есть этот тест, в котором я собираюсь издеваться над репозиторием, но я не могу понять, как
@RunWith(MockitoJUnitRunner.class)
public class GenericHistoryServiceTest {
@Mock
private GenericHistoryRepository genericHistoryRepository;
@InjectMocks
private GenericHistoryService genericHistoryService = new GenericHistoryServiceImpl();
@Test
public <T extends Historiable> void getHistoryOk2() throws NotFoundException, ClassNotFoundException {
String id = "1"
;
String collectionName = HistoriableCollections.HISTORIABLE_SHIPMENT_REQUEST;
ShipmentRequest a = mock(ShipmentRequest.class);
Class<? extends Historiable> clazz = ShipmentRequest.class;
when(genericHistoryRepository.get(any(String.class), eq(clazz), collectionName)).thenReturn(createExample());
HistoriableDTO result = genericHistoryService.get(id, HistoriableCollections.HISTORIABLE_SHIPMENT_REQUEST);
// verify(genericHistoryRepository, times(1)).get(id, any(), HistoriableCollections.HISTORIABLE_SHIPMENT_REQUEST);
assertThat(result, is(notNullValue()));
assertThat(result.getId(), is(notNullValue()));
}
Сохранитьпомните, что Historiable является абстрактным классом
public abstract class Historiable {
public abstract String getParentId();
}
И это расширяет Historiable
@Document(collection = HistoriableCollections.HISTORIABLE_SHIPMENT_REQUEST)
public class ShipmentRequest extends Historiable {
private String id;
@Indexed
private String parentId;
...
}
Моя проблема с предложением «когда», определяющим поведение макета репозитория.У него есть общие методы, которые я не знаю, как имитировать
Class<? extends Historiable> clazz = ShipmentRequest.class;
when(genericHistoryRepository.get(any(String.class), eq(clazz), collectionName)).thenReturn(createExample());
Я получаю
Метод thenReturn (capture # 1-of? Extends Historiable) вТип OngoingStubbing не применим для аргументов (ShipmentRequest)
private ShipmentRequest createExample() {
ShipmentRequest history = new ShipmentRequest();
history.setId("1");
return history;
}