嗨,我正在嘗試測驗服務層。我已經為ConverterFactory. 我想我需要ConverterServiceImpl使用但我仍然得到的模擬依賴類NullPointerException
這是我的服務類
@Service
@RequiredArgsConstructor
public class ConverterServiceImpl implements ConverterService {
ConverterFactory factory = new ConverterFactory();
private final WebLinkRepository webLinkRepository;
private final DeepLinkRepository deepLinkRepository;
@Override
public DeepLinkResponse toDeepLink(WebLinkRequest webLinkRequest) {
WebLink webLink;
String url = webLinkRequest.getUrl();
Converter converter = factory.getConverter(url);
webLink = new WebLink();
webLink.setUrl(url);
String convertedUrl = converter.toDeepLink(url);
webLink.setConvertedUrl(convertedUrl);
webLinkRepository.save(webLink);
return new DeepLinkResponse(convertedUrl);
}
}
這是測驗
@RunWith(MockitoJUnitRunner.class)
public class ConverterServiceImplTest {
@InjectMocks
ConverterServiceImpl converterService;
@Mock
WebLinkRepository webLinkRepository;
@Mock
DeepLinkRepository deepLinkRepository;
@Mock
ConverterFactory converterFactory;
@Mock
ProductConverter productConverter;
@Mock
WebLinkRequest webLinkRequest;
@BeforeAll
void init(){
webLinkRequest.setUrl(WEBLINK_ONLY_PRODUCT);
}
@Test
public void toDeepLink_only_content_id() {
ConverterFactory converterFactory = mock(ConverterFactory.class);
when(converterFactory.getConverter(any())).thenReturn(productConverter);
DeepLinkResponse deepLinkResponse = converterService.toDeepLink(webLinkRequest);
assertEquals(deepLinkResponse.getUrl(),"ty://?Page=Product&ContentId=1925865");
}
}
這段代碼拋出錯誤說。我在這里做錯了什么?:
java.lang.NullPointerException
at com.example.converter.service.factory.ConverterFactory.getConverter(ConverterFactory.java:13)
uj5u.com熱心網友回復:
您不需要ConverterFactory converterFactory = mock(ConverterFactory.class)在測驗方法中再次創建,因為您已經創建了這樣的模擬作為類欄位。
此外,您沒有將在測驗方法中創建的模擬注入到被測類中,而創建為欄位的模擬是使用@InjectMocks注解注入的。
所以只需ConverterFactory converterFactory = mock(ConverterFactory.class)從測驗方法中洗掉:
@RunWith(MockitoJUnitRunner.class)
public class ConverterServiceImplTest {
@InjectMocks
ConverterServiceImpl converterService;
@Mock
ConverterFactory converterFactory;
// other stuff
@Test
public void toDeepLink_only_content_id() {
when(converterFactory.getConverter(any())).thenReturn(productConverter);
// other stuff
converterService.toDeepLink(webLinkRequest);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314167.html
上一篇:帶有apachePOI的驗證字串
