以下示例正常。问题是我需要@InjectMocks
注释。当我用SpringJUnit4ClassRunner.class
替换MockitoJUnitRunner.class
时,所有内容都会中断(bar = null
而不是testValue
)。
如何解决?
//@RunWith(MockitoJUnitRunner.class) // not work (
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = FooTest.Config.class)
@TestPropertySource(properties = {
"some.bar.value=testValue",
})
public class FooTest {
@Value("${some.bar.value}")
String bar;
@Test
public void testValueSetup() {
assertEquals("testValue", bar);
}
@Configuration
static class Config {
@Bean
public static PropertySourcesPlaceholderConfigurer propertiesResolver() {
return new PropertySourcesPlaceholderConfigurer();
}
}
}
答案 0 :(得分:3)
你应该能够使用ClassRule和Rule的这个组合来启用SpringRunner所具有的相同功能。
Tuple
然后像正常一样使用MockitoRunner。
此外,您可以随时直接使用 @ClassRule
public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule();
@Rule
public final SpringMethodRule springMethodRule = new SpringMethodRule();
等模拟依赖项注释方法,而稍微更清晰可能会导致一些恼人的运行时问题,如果测试不简单,尤其是。如果是Mockito.mock
。
很好奇为什么你需要一个SpringBoot项目中的Mockito跑步者?您可以在需要时使用MockBeans来模拟Spring Bean。闻起来就像一个XY问题因为我从未使用过MockitoRunner。
答案 1 :(得分:2)
Mockito还提供了一条规则来克服无法使用MockitoJUnitRunner
的情况,例如:
@Rule
public MockitoRule mockito = org.mockito.junit.MockitoJUnit.rule();
...或者您可以手动设置Mockito:
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}