嗨,我正在嘗試測驗該方法,但它回傳了null,我不知道為什么;該方法應該正常作業,但我仍然有NullPointerException
。@Service
public class AzureCloudStorageService implements FileService {
private final String connectionString;
private final String containerName;
private final ModelMapper modelMapper;
public AzureCloudStorageService(@Autowired PropertyResolver propertyResolver,
ModelMapper modelMapper) {
this.connectionString = propertyResolver.getProperty("azure.connection.string") 。
this.containerName = propertyResolver.getProperty("azure.container.name") 。
this.modelMapper = modelMapper。
}
public MultipartFile convertToMultipartImage(String image) {
try {
return modelMapper.map(image, MultipartFile.class) 。
} catch (Exception e) {
throw new BadRequestException(ErrorMessage.MULTIPART_FILE_BAD_REQUEST image)。
}
}
和測驗方法,也許是因為final方法或其他原因,我不知道
。@ExtendWith(SpringExtension.class)
class AzureCloudStorageServiceTest {
@Mock
private ModelMapper modelMapper。
@Mock
private AzureCloudStorageService azureCloudStorageService。
@Test
void convertToMultipartImage(){
MultipartFile multipartFile = ModelUtils.getFile()。
String image = "Image"/span>。
當(modelMapper.map(image, MultipartFile.class)).thenReturn(multipartFile)。
MultipartFile actual = azureCloudStorageService.convertToMultipartImage("Image")。
assertEquals(multipartFile, actual)。
}
}
這是我的程式的堆疊跟蹤。一些例外情況和錯誤,抱歉在評論中出現了螢屏,但我沒有看到如何編輯
。org.opentest4j.AssertionFailedError:
預期 :org.springframework.mock.web.MockMultipartFile@441cc260
實際 :null。
<點擊查看區別>。
at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:55)
at org.junit.jupiter.api.AssertionUtils.failNotEqual(AssertionUtils.java:62)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177)
at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1124)
在greencity.service.AzureCloudStorageServiceTest.convertToMultipartImage(AzureCloudStorageServiceTest.java:46)
在java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
在org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java: 206)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)。
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)。
at org.junit.platform.engine.support.hierarchical.Node.round(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)。
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)。
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)。
at org.junit.platform.engine.support.hierarchical.Node.round(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)。
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)。
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)。
at org.junit.platform.engine.support.hierarchical.Node.round(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)。
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.executor(HierarchicalTestExecutor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.executor(HierarchicalTestEngine.java:51)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:71)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
uj5u.com熱心網友回復:
你的問題源于你做mocks的錯誤方式。在你的代碼中,你做了以下作業:
private AzureCloudStorageService azureCloudStorageService。
這實際上是回傳一個AzureCloudStorageService的模擬實體。在這種情況下,這不是你想要的和需要的,因為這是你需要測驗的東西(即被測單元)。但您需要做的是通過呼叫其建構式并傳入模擬的ModelMapper以及PropertyResolver來手動實體化AzureCloudStorageService。
uj5u.com熱心網友回復:
代替
@Mock
private ModelMapper modelMapper。
在方法中或@Before方法中使用:
ModelMapper modelMapper = Mockito.mock(ModelMapper.class)。
它對我來說是有效的:
ServicioCalls servicioCalls = Mockito.mock(ServicioCalls.class)。
EncapsulatedError<?> encapsulatedError = new EncapsulatedError<> (SpResult. SUCCESS_CODE, SpResult.OK, 0, null)。)
Mockito.doReturn(encapsulatedError).when(servicioCalls).obtenerCalls(anyString(), anyString(), anyLong()。
uj5u.com熱心網友回復:
好的,用它試試:
修改一下:
when(modelMapper.map(image, MultipartFile.class)).thenReturn(multipartFile)。
通過這個:
Mockito.doReturn(modelMapper).when(modelMapper).map(anyString(),any())。
并將模擬物件modelMapper預先呼叫的azureCloudStorageService設為:
azureCloudStorageService.setModelMapper(modelMapper)。
MultipartFile actual = azureCloudStorageService.convertToMultipartImage("Image")。
assertEquals(multipartFile, actual)。
uj5u.com熱心網友回復:
好的,你可以使用繼承,創建一個像它一樣的虛擬類
private static class CallsRestStub extends CallsRest {
}
當CallsRest是原始類和modelMapper保護時。 通過它,你可以創建一個CallsRestStub的實體,而不是CallSRest,并將嘲諷物件設定為它
uj5u.com熱心網友回復:它可以正常作業,并且覆寫了我的方法和構造器)謝謝你akortex
void convertToMultipartImage(){
MultipartFile multipartFile = Mockito.mock(MultipartFile.class)。
AzureCloudStorageService azureCloudStorageService = operator">= new AzureCloudStorageService(propertyResolver, modelMapper)。)
String image = "Image" ;
當(modelMapper.map(image, MultipartFile.class)).thenReturn(multipartFile)。
assertEquals(multipartFile, azureCloudStorageService.convertToMultipartImage("Image"))。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/328064.html
標籤:
