我有配置类:
@ConfigurationProperties(prefix = "myConfig")
public class MyConfig {
protected String config;
}
我的服务使用这个配置类(从 application.yml
获取值):
@Service
public class myService {
@Inject
private MyConfig myConfig;
Public String getInfo (String param) {
if (isEmpty(param)) { throw new InvalidParameterException; }
return myConfig.getConfig();
}
}
我正在尝试使用 Mockito 对其进行测试:
@RunWith(MockitoJUnitRunner.class)
public class myTest {
@InjectMocks
private MyService myService;
@Mock
private MyConfig myConfig;
@Test
public void myTest1() {
myService.getInfo("a");
}
@Test
public void myTest2() {
assertThrows(InvalidParameterException.class, ()->myService.getInfo(null));
}
}
myTest
失败,因为配置类是模拟的,因此具有空值。
使用 Mockito 测试配置类的正确方法是什么?
编辑:
我在 myService
中使用了很多类似上面的配置类。
最佳答案
您需要创建 getter,然后 Mockito 可以模拟它。
@ConfigurationProperties(prefix = "myConfig")
public class MyConfig {
protected String config;
public String getConfig() {
return config;
}
}
.
@RunWith(MockitoJUnitRunner.class)
public class myTest {
@InjectMocks
private MyService myService;
@Mock
private MyConfig myConfig;
@Before
private void initializeConfig() {
when(myConfig.getConfig()).thenReturn("someValue");
}
@Test
public void myTest1() {
myService.getInfo("a");
}
}
但是如果您不想在测试中显式设置该值,您应该创建一个 Spring 集成测试,它会创建整个上下文并使用真实对象。但这超出了这个问题的范围。
关于spring - 使用 Mockito 测试 @ConfigurationProperties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57304149/