这是我要测试的类(class),
public class AuthErrorResponseWriter {
@Autowired
TransResponse svcResponse;
@Override
public void writeResponse(HttpServletResponse response) {
//Set the Http status
response.setStatus(HttpStatus.FORBIDDEN.value());
svcResponse.setMessage(Constants.AUTHENTICATION_ERROR);
svcResponse.setStatus(HttpStatus.FORBIDDEN.toString());
ObjectMapper mapper = new ObjectMapper();
//Write the response
try {
Writer writer = response.getWriter();
writer.write(mapper.writeValueAsString(svcResponse));
writer.flush();
writer.close();
} catch (IOException ioex) {
logger.error("Problem producing authentication error http response",ioex);
}
}
}
我编写的单元测试代码如下,
RunWith(SpringRunner.class)
@WebMvcTest({AuthErrorResponseWriter .class})
@ComponentScan("com.demo.service")
public class AuthErrorResponseWriterTest {
@Mock
HttpServletResponse responseMock;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
@Test
public void testResponse(){
TransResponse mockResponse = new TransResponse();
mockResponse.setMessage(Constants.AUTHENTICATION_ERROR);
mockResponse.setStatus(HttpStatus.FORBIDDEN.toString());
AuthErrorResponseWriter authErrorWriter = new AuthErrorResponseWriter ();
PrintWriter writerMock = mock(PrintWriter.class);
try {
when(responseMock.getWriter()).thenReturn(writerMock);
} catch (IOException ioex) {
//assertTrue(false);
}
authErrorWriter.writeResponse(responseMock);
verify(responseMock).setStatus(HttpStatus.FORBIDDEN.value());
}
}
当我执行此 Junit 时,出现空指针异常
svcResponse.setMessage(Constants.AUTHENTICATION_ERROR);
svcResponse 为 null,即使我已经 mock 了它。
请有人指出我为什么它不拾取模拟对象并寻找实际对象。
另外,我编写 Junit 是否是正确的方法?
最佳答案
您可能想使用 Mockito 的运行程序而不是 Spring(据我所知,您根本不需要 Spring 的上下文):
@RunWith(MockitoJUnitRunner.class)
public class SubscriptionServiceTest {
@InjectMocks
private AuthErrorResponseWriter authErrorResponseWriter;
@Mock
TransResponse svcResponse;
@Mock
HttpServletResponse responseMock;
....
authErrorWriter.writeResponse(responseMock);
关于java - Spring & Mockito : Actual Object getting called in Unit Test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41640907/