下面是我的代码。RestTemplateFactoryForMyApp是从哪里我得到RestTemplate对象。在其他类RestTemplateExampleClass,我正在测试。我使用它如下,它工作得很好。我已经编写了JUnit到RestTemplate调用,它也工作得很好。但是,当我在JUnit测试类中将下面的代码注释为restTemplateFactoryForMyApp.restTemplate()=NULL时,我得到NullPointerException。我怎样才能避免这种情况呢?假设我在RestTemplateFactoryForMyApp中调用了10个不同的类方法,那么我也必须为它们做同样的事情。那么我怎样才能避免呢?
@Configuration
public class RestTemplateFactoryForMyApp {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
given(restTemplateFactoryForMyApp.restTemplate()).willReturn(restTemplate);
private final RestTemplate restTemplate = mock(RestTemplate.class);
@Autowired
private RestTemplateFactoryForMyApp restTemplateFactoryForMyApp;
restTemplateFactoryForMyApp.restTemplate().exchange
下面是我的JUnit测试restTemplate调用
@ExtendWith(MockitoExtension.class)
public class RestTemplateExampleTest {
@Mock
private RestTemplateFactoryForMyApp restTemplateFactoryForMyApp;
@InjectMocks
private RestTemplateExample restTemplateExample ;
private final RestTemplate restTemplate = mock(RestTemplate.class);
@BeforeEach
void setUp() throws Exception {
given(restTemplateFactoryForMyApp.restTemplate()).willReturn(restTemplate);
ReflectionTestUtils.setField(restTemplateExample, "id", 1);
}
@Test
public void mock_resttemplate() {
TodosObject todosObject = new TodosObject();
todosObject.setId(1);
System.out.println(" restTemplateFactoryForMyApp " + restTemplateFactoryForMyApp.restTemplate());
int i = (int) ReflectionTestUtils.getField(restTemplateExample, "id");
System.out.println( " value of i " + i);
Mockito
.when(restTemplateFactoryForMyApp.restTemplate().exchange(
"https://jsonplaceholder.typicode.com/todos/" + i,
HttpMethod.GET,
null,
TodosObject.class
))
.thenReturn(new ResponseEntity<TodosObject>(todosObject, HttpStatus.OK));
我不完全确定你的问题,但也许returns_deep_stub有帮助:
@ExtendWith(MockitoExtension.class)
public class RestTemplateExampleTest {
@Mock(answer = RETURNS_DEEP_STUBS)
private RestTemplateFactoryForMyApp restTemplateFactoryForMyApp;
@InjectMocks
private RestTemplateExample restTemplateExample;
@BeforeEach
void setUp() throws Exception {
ReflectionTestUtils.setField(restTemplateExample, "id", 1);
}
@Test
public void mock_resttemplate() {
TodosObject todosObject = new TodosObject();
todosObject.setId(1);
System.out.println(" restTemplateFactoryForMyApp " + restTemplateFactoryForMyApp.restTemplate());
int i = (int) ReflectionTestUtils.getField(restTemplateExample, "id");
System.out.println( " value of i " + i);
Mockito
.when(restTemplateFactoryForMyApp.restTemplate().exchange(
"https://jsonplaceholder.typicode.com/todos/" + i,
HttpMethod.GET,
null,
TodosObject.class
))
.thenReturn(new ResponseEntity<TodosObject>(todosObject, HttpStatus.OK));