[英]How to mock Inner class instance using Mockito
@ConfigurationProperties(prefix= 'app')
@Getter @Setter
public class AppConfig{
private ExternalService externalService=new ExternalService();
@Getter @Setter
public static class ExternalService{
private String url;
private String authToken;
}
}
我正在使用 AppConfig 的服務。
@Service
@AllArgsConstructor
public class ExternalService{
private final AppConfig appConfig;
public boolean isAuthorize(String token){
String authUrl=appConfig.getExternalService().getUrl();
boolean isAuthorize= //External Apis call
return isAuthorize;
}
}
ExternalService 的測試類
@ExtendWith(MockitoExtension.class)
class ExternalTestService{
@Mock
private AppConfig AppConfig;
@Mock
private AppConfig.ExternalService externalSeriveConfig;
@InjectMocks
private ExternalService externalService;
@Test
public void shouldAuthorize(){
//Null Pointer exception for AppConfig.getExternalService()
Mockito.when(AppConfig.getExternalService().getUrl()).thenReturn("123456");
Assertions.assertEquals(externalService.isAuthorize(),true);
}
如果我在 shouldAuthorize 中模擬 GradingProperties.CentralServiceConfig 那么它工作正常但是在 ExternalService(String authUrl=appConfig.getExternalService().getUrl();) 的 Assertions.assertEquals 時得到 NullPointerException 像
@Test
public void shouldAuthorize(){
AppConfig.ExternalService externalMock=Mockito.mock(AppConfig.ExternalService.class);
Mockito.when(externalMock.getUrl()).thenReturn("123456");
Assertions.assertEquals(externalService.isAuthorize(),true);
}
如何模擬並使此代碼可運行
當您有鏈式方法調用時,您需要確保鏈式調用的每個部分都返回非空結果。
Mockito.when(AppConfig.getExternalService().getUrl()).thenReturn("123456");
您尚未對AppConfig
任何調用,因此AppConfig.getExternalService()
返回 null。
你需要:
Mockito.when(AppConfig.getExternalService()).thenReturn(externalSeriveConfig);
Mockito.when(AppConfig.getExternalService().getUrl()).thenReturn("123456");
或者,甚至更好:
Mockito.when(AppConfig.getExternalService()).thenReturn(externalSeriveConfig);
Mockito.when(externalSeriveConfig.getUrl()).thenReturn("123456");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.