我希望创建测试使用Spring Context,使用模拟的Repository bean。我正在使用Spring Boot 1.3.2.BUILD-SNAPSHOT + JUnit + Mockito。
这是我的测试配置类:
@ComponentScan(basePackages = "myapp", excludeFilters =
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
value = {
OfferRepository.class
}
)
)
@Configuration
public class TestEdge2EdgeConfiguration {
@Bean
public OfferRepository offerRepository() {
return mock(OfferRepository.class);
}
}
此配置的目的是从Spring Context中排除OfferRepository并对其进行模拟,感谢这一点,我将能够编写使用Spring Context与模拟数据库存储库的测试。
这是我的测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {TestEdge2EdgeConfiguration.class})
@WebAppConfiguration
public class OfferActionsControllerTest {
@Autowired
private OfferRepository offerRepository;
@Autowired
private OfferActionsController offerActionsController;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
@Test
public void saveOffer() {
//given
BDDMockito.given(offerRepository.save(any(Offer.class))).willReturn(new Offer());
//when
ResponseEntity<Offer> save = offerActionsController.save(new Offer());
//then
org.springframework.util.Assert.notNull(save);
}
}
测试和测试配置目录是:
src/test/java/myapp
我的应用程序配置和包含OfferRepository目录的包是:
src/main/java/myapp/
问题是Spring Boot没有从TestEdge2EdgeConfiguration.class加载我的配置,并且从未创建过关于OfferRepository的模拟。
请问,身体能帮助我吗?
答案 0 :(得分:0)
这就是你应该这样做的(假设你正在为offerActionsController编写测试并注入offerRepository):
@Mock
private OfferRepository offerRepository;
@InjectMocks
private OfferActionsController offerActionsController;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
您可以按如下方式编写测试方法:
@Test
public void saveOffer() {
/* Given */
Mockito.when(offerRepository.save(Mockito.any(Offer.class))).thenReturn(new Offer());
//when
ResponseEntity<Offer> save = offerActionsController.save(new Offer());
//then
org.springframework.util.Assert.notNull(save);
}
答案 1 :(得分:0)
使用Spingockito使用@ReplaceWithMock用模拟替换bean。如果您需要访问测试中的模拟bean,请不要忘记将@Autowired
与@ReplaceWithMock
一起使用。