【发布时间】:2015-12-25 13:13:12
【问题描述】:
我正在尝试为这个 Java SpringBoot 的类编写一个测试:
具体来说,我正在尝试“模拟”这个方法调用:
URI uri = util.getServiceUrl("product");
我想我应该“模拟”ServiceUtils 对象才能做到这一点。我尝试使用@Mock 和@InjectMocks 注释:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ProductCompositeServiceApplication.class)
public class ProductCompositeIntegrationTest {
@InjectMocks
@Autowired
private ProductCompositeIntegration productIntegration;
@Autowired
private RestTemplate restTemplate;
@Mock
private ServiceUtils util;
private MockRestServiceServer mockServer;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mockServer = MockRestServiceServer.createServer(restTemplate);
}
@Test
public void myTest() {
Mockito.when(util.getServiceUrl("product")).thenReturn(URI.create("http://localhost:8080/test"));
ResponseEntity<Iterable<Product>> products = productIntegration.getAllProducts();
}
}
但是这样它仍然调用原始的ServiceUtils 对象,而不是“模拟”对象。还尝试在ProductCompositeIntegration 处不使用@Autowired 注释,但这会导致NullPointerException。
我做错了什么?
我的主课是这样的:
@SpringBootApplication
@EnableCircuitBreaker
@EnableDiscoveryClient
public class ProductCompositeServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ProductCompositeServiceApplication.class, args);
}
}
我试图模拟的 ServiceUtils 对象在一个类中指定,并使用 Spring 的 @Component 注释进行注释,以使用 @Autowired 将其注入其他类。
【问题讨论】:
标签: java spring unit-testing spring-boot mockito