Yansıma tabanlı bazı yöntemlerle dalga geçmeye çalışıyorum. EğerMocking Yansıma tabanlı çağrılar
public class TracerLog {
@AroundInvoke
public Object logCall(InvocationContext context) throws Exception {
Logger logger = new Logger();
String message = "INFO: Invoking method - "
+ context.getMethod().getName() + "() of Class - "
+ context.getMethod().getDeclaringClass();
logger.write(message);
return context.proceed();
}
}
Testi
public class TracerLogTest {
@Mock
InvocationContext mockContext;
@Mock
Logger mockLogger;
@InjectMocks
private TracerLog cut = new TracerLog();
@BeforeMethod
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void logCallTest() throws Exception {
when(mockContext.proceed()).thenReturn(true);
when(mockContext.getMethod().getDeclaringClass().getName()).thenReturn("someClass");
cut.logCall(mockContext);
verify(mockContext).proceed();
}
}
veya
@Test
public void logCallTest() throws Exception {
when(mockContext.proceed()).thenReturn(true);
when(mockContext.getMethod().getName()).thenReturn("someMethod");
when(mockContext.getMethod().getDeclaringClass().getName()).thenReturn("someClass");
cut.logCall(mockContext);
verify(mockLogger).write(anyString());
verify(mockContext).proceed();
}
Fakat testler NullPointerException ile başarısız detaylarını, Testi altında
Class görebilirsiniz Aşağıda . Alaycı kavramlara karşı yanlış bir şey yaptığımı anlıyorum, ama ne olduğunu anlamıyorum. Biraz ışık tutabilir misiniz ve bana bu yöntemin nasıl test edilebileceğini gösterir misiniz?
Teşekkürler.
Sahte nesnelerinizi ve test edilen nesneyi nasıl yaratıyorsunuz? Test metodunu değil, tüm test sınıfınızı yayınlayabilir misiniz? Teşekkürler. –
@DavidWallace Sorunun tamamını kodun tamamını içerecek şekilde düzenledim. – Bala