首页 > 解决方案 > MockitoJunitRunner 可以模拟 Spring @Configuration 类,但所有字段均为空

问题描述

我有一个这样的配置类:

@Configuration
@ComponentScan(basePackages = "com.**.**") // production code, can't write package name
@EnableCaching
@PropertySource(value = { "classpath:application.properties", "classpath:version.txt"})
@EnableScheduling
public class AppConfig {

    @Value("${builtProfile}")
    @Nonnull
    private String activeProfile;

    ...
}

这是测试类:

@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(classes = {AppConfig.class, MvcConfiguration.class})
@ActiveProfiles("test")
public class NativeLoginServiceImplTest {

   @InjectMocks
   private NativeLoginServiceImpl nativeLoginServiceImpl;

   @Mock
   private AppConfig mAppConfiguration;

}

是在测试期间创建的mAppConfiguration,但问题是它的所有字段都是空的。我的测试设置有什么问题,如何制作正确的设置,以便 Mockito 可以自动application.properties为我获取文件中的这些值?

标签: javaunit-testingspring-mvcmockito

解决方案


我想对于您的领域,您至少有 getter 方法。您应该使用whenthenReturn方法来进行模拟工作。像这样:

@Test
public void someTestMethod(){

    Mockito.when(mAppConfiguration.getActiveProfile()).thenReturn("some value");

    /** actual test goes here**/
}

推荐阅读