В вашем исходном классе должны быть зависимости добавлены с @Autowired
или @Inject
. На самом деле вы должны использовать не инъекцию поля, а конструктор. Затем вы должны использовать @ExtendWith(MockitoExtension.class)
для тестового класса JUnit 5. Каждую зависимость, которую вы должны определить как @Mock
, и для класса, который вы хотите проверить, вы используете аннотацию @InjectMocks
.
Это инъекция конструктора для использования:
public class FragenAntwortenDataprovider extends SortableDataProvider<FragenAntworten, String> {
private IFragenAntwortenService service;
private IModel<FragenAntworten> filter;
@Inject
public FragenAntwortenDataprovider(IFragenAntwortenService service, IModel<FragenAntworten> filter){
this.service = service;
this.filter = filter;
//I guess you don't need the injector anymore
//Injector.get().inject(this);
setSort("id", SortOrder.DESCENDING); // absteigend sortieren
}
//Rest of class
}
И тогда это тестовый класс:
@ExtendWith(MockitoExtension.class)
public class testClass() {
@Mock
private IFragenAntwortenService service;
@Mock
private IModel<FragenAntworten> filter;
@InjectMocks
FragenAntwortenDataprovider sut; //System under Test
@Test
void test() {
//Testcode
// Control the mock with
when(service.anymethod()).thenReturn(result);
var result = sut.callMethodToTest();
// verify all calls
verify(service, times(1)).anymethod();
// and assert
assertNotNull(result);
}
}