Also fing ich an, Tests für unser Java-Spring-Projekt zu schreiben.Mockito - NullpointerException wenn stubbing Methode
Was ich benutze ist JUnit und Mockito. Es wird gesagt, dass ich, wenn ich die Option when() ... thenReturn() verwende, Dienste simulieren kann, ohne sie zu simulieren. Also, was ich tun möchte, ist, zu setzen:
when(classIwantToTest.object.get().methodWhichReturnsAList(input))thenReturn(ListcreatedInsideTheTestClass)
Aber egal was when-Klausel ich tun, habe ich immer eine Nullpointer, was natürlich Sinn macht, weil Eingang null ist.
Auch wenn ich versuche, eine andere Methode von einem Objekt zu verspotten:
when(object.method()).thenReturn(true)
Es bekomme ich auch eine Nullpointer, da das Verfahren eine Variable benötigt, die nicht festgelegt ist.
Aber ich möchte verwenden, wenn() .. thenReturn() um diese Variable zu erstellen und so weiter. Ich möchte nur sicherstellen, dass, wenn irgendeine Klasse diese Methode aufruft, egal was passiert, geben Sie einfach true oder die obige Liste zurück.
Ist es ein grundsätzliches Missverständnis von meiner Seite, oder stimmt etwas anderes nicht?
Code:
public class classIWantToTest implements classIWantToTestFacade{
@Autowired
private SomeService myService;
@Override
public Optional<OutputData> getInformations(final InputData inputData) {
final Optional<OutputData> data = myService.getListWithData(inputData);
if (data.isPresent()) {
final List<ItemData> allData = data.get().getItemDatas();
//do something with the data and allData
return data;
}
return Optional.absent();
}
}
Und hier ist meine Testklasse:
public class Test {
private InputData inputdata;
private ClassUnderTest classUnderTest;
final List<ItemData> allData = new ArrayList<ItemData>();
@Mock
private DeliveryItemData item1;
@Mock
private DeliveryItemData item2;
@Mock
private SomeService myService;
@Before
public void setUp() throws Exception {
classUnderTest = new ClassUnderTest();
myService = mock(myService.class);
classUnderTest.setService(myService);
item1 = mock(DeliveryItemData.class);
item2 = mock(DeliveryItemData.class);
}
@Test
public void test_sort() {
createData();
when(myService.getListWithData(inputdata).get().getItemDatas());
when(item1.hasSomething()).thenReturn(true);
when(item2.hasSomething()).thenReturn(false);
}
public void createData() {
item1.setSomeValue("val");
item2.setSomeOtherValue("test");
item2.setSomeValue("val");
item2.setSomeOtherValue("value");
allData.add(item1);
allData.add(item2);
}
Das Objekt in when() muss ein Mock sein, erstellt von Mockito.mock(), es funktioniert nicht für manuell erstellte reale Objekte - nicht sicher, ob das Ihr Problem ist, da ich nicht wirklich wo Ihr Problem ist. .. – Nadir
Bitte poste etwas Code. –
Es klingt wie 'classIwantToTest.object.get()' Ergebnis ist kein Mock, oder das 'get()' gibt null zurück. Aber bitte posten Sie Ihren Code, zeigen Sie Ihren Test und die Initialisierung Ihrer Mocks. – vikingsteve