Ich schreibe einen Junit 4 -Test mit Mockito 2 und PowerMockito, aber mit seltsamer Probleme konfrontiert, während er eine Methode verspottet. class = "Lang-Java PrettyPrint-Override">
Code: Select all
@Test
public void testCheckCreatedBeforeDate() throws Exception {
PowerMockito.mockStatic(ServiceInfo.class);
ServiceInfo mockServiceInfo = mock(ServiceInfo.class);
when(ServiceInfo.getInstance(anyString())).thenReturn(mockServiceInfo);
when(mockServiceInfo.getCreationDate()).thenReturn(new Date()); // Issue happens here
assertEquals(Boolean.TRUE, myUtils.isCreatedBeforeDate(anyString()));
}
< /code>
und die Methode, die getestet wird: < /p>
public Boolean isCreatedBeforeDate(String serviceId) {
try {
ServiceInfo serviceInfo = ServiceInfo.getInstance(serviceId);
LocalDate creationDate = serviceInfo.getCreationDate().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
return creationDate.isBefore(LAUNCH_DATE);
} catch (SQLException e) {
throw new RuntimeException("Error checking creation date", e);
}
}
Probleme, mit denen ich ausgesetzt bin :
Code: Select all
PowerMockito.when(mockServiceInfo.getCreationDate()).thenReturn(new Date());
[/b] → löst StackoverFlowerror
ausCode: Select all
PowerMockito.doReturn(new Date()).when(mockServiceInfo).getCreationDate();
[/b] → Gibt NULL
zurückCode: Select all
when(mockServiceInfo.getCreationDate()).thenReturn(new Date());
[/b] → Gibt NULL nach der Ausführung
Bewertung von MockServiceInfo.getCreationDate () in Debugger → Gibt NULL
zurückCode: Select all
mockingDetails(mockServiceInfo).isMock()
vor Stubbing [/b] →

Gibt true
zurückCode: Select all
mockingDetails(mockServiceInfo).isMock()
Nach Stubbing [/b] →

Gibt false
Fragen : < BR/>
[*] Warum ist MockServiceInfo.getCreationDate () Null oder einen Stackoverflowerror ?
zurückgebracht < /li>
Gibt es einen Konflikt zwischen statischer und Instanzverspottung? Verspotten Sie dieses Verhalten?
Verwenden von Doreturn (neuer Datum ()). Wenn (MockServiceInfo) .GetCreationDate (); < /code> < /p>
< /li>
Überprüfen Sie, ob MockServiceInfo ein ordnungsgemäßes Mock
[*] ist, um Mockstatic (serviceInfo.class) wird vor dem Verspottungs -Instanzmethoden durchgeführt
[/u]
Ich schreibe einen Junit 4 -Test mit Mockito 2 und PowerMockito, aber mit seltsamer Probleme konfrontiert, während er eine Methode verspottet. class = "Lang-Java PrettyPrint-Override">[code]
@Test
public void testCheckCreatedBeforeDate() throws Exception {
PowerMockito.mockStatic(ServiceInfo.class);
ServiceInfo mockServiceInfo = mock(ServiceInfo.class);
when(ServiceInfo.getInstance(anyString())).thenReturn(mockServiceInfo);
when(mockServiceInfo.getCreationDate()).thenReturn(new Date()); // Issue happens here
assertEquals(Boolean.TRUE, myUtils.isCreatedBeforeDate(anyString()));
}
< /code>
und die Methode, die getestet wird: < /p>
public Boolean isCreatedBeforeDate(String serviceId) {
try {
ServiceInfo serviceInfo = ServiceInfo.getInstance(serviceId);
LocalDate creationDate = serviceInfo.getCreationDate().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
return creationDate.isBefore(LAUNCH_DATE);
} catch (SQLException e) {
throw new RuntimeException("Error checking creation date", e);
}
}
[/code]
[b] Probleme, mit denen ich ausgesetzt bin [/b]:
1️⃣ [b][code]PowerMockito.when(mockServiceInfo.getCreationDate()).thenReturn(new Date());[/code] [/b] → löst StackoverFlowerror
2️⃣ [b] aus[code]PowerMockito.doReturn(new Date()).when(mockServiceInfo).getCreationDate();[/code] [/b] → Gibt NULL
3️⃣ [b] zurück[code]when(mockServiceInfo.getCreationDate()).thenReturn(new Date());[/code] [/b] → Gibt NULL nach der Ausführung
4️⃣ [b] Bewertung von MockServiceInfo.getCreationDate () in Debugger [/b] → Gibt NULL
5️⃣ [b] zurück[code]mockingDetails(mockServiceInfo).isMock()[/code] vor Stubbing [/b] → ✅ Gibt true
6️⃣ [b] zurück[code]mockingDetails(mockServiceInfo).isMock()[/code] Nach Stubbing [/b] → ❌ Gibt false
[b] Fragen [/b]: < BR/> [u]
[*] Warum ist MockServiceInfo.getCreationDate () Null oder einen Stackoverflowerror ?
zurückgebracht < /li>
Gibt es einen Konflikt zwischen statischer und Instanzverspottung? Verspotten Sie dieses Verhalten?
Verwenden von Doreturn (neuer Datum ()). Wenn (MockServiceInfo) .GetCreationDate (); < /code> < /p>
< /li>
Überprüfen Sie, ob MockServiceInfo ein ordnungsgemäßes Mock
[*] ist, um Mockstatic (serviceInfo.class) wird vor dem Verspottungs -Instanzmethoden durchgeführt
[/u]