java - 如何在单元测试中为字符串设置值?
问题描述
在我目前的课程中,我有一个如下所示的字段:
班级
@Inject
@ConfigValue(key = ConfigProperties.ADDRESS)
private String address;
配置属性
public static final String ADDRESS = //
"42 Rue Cadet, 75009 Paris";
我有一个方法:
......
private boolean isValidAddress() {
if(address != null && address.equals("42 Rue Cadet, 75009 Paris")) {
return true;
} else {
return false;
}
}
......
我想创建一个单元测试来验证 isValidAddress() 方法,但我不知道如何设置地址。
例如:我想用这个地址进行测试 =“23 Rue Luvru, 75045 Paris”。我正在考虑模拟 ConfigProperties,但我在 ConfigProperties 中没有任何方法可以设置地址的值。
有什么建议么 ?
解决方案
我们遇到了同样的问题,并且像许多人建议的那样使用反射来解决问题非常麻烦......所以我们编写了一个 JUnit5 Extension 来解决这个确切的问题:
https://github.com/exabrial/mockito-object-injection
它所做的是将值注入到您的测试类中,这些值在您提供的 Map 中具有相同的键名。
@TestInstance(Lifecycle.PER_METHOD)
@ExtendWith({ MockitoExtension.class, InjectMapExtension.class })
public class MyControllerTest {
@InjectMocks
private MyController myController;
@Mock
private Logger log;
@Mock
private Authenticator auther;
@InjectionMap
private Map<String, Object> injectionMap = new HashMap<>();
@BeforeEach
public void beforeEach() throws Exception {
injectionMap.put("securityEnabled", Boolean.TRUE);
}
@AfterEach
public void afterEach() throws Exception {
injectionMap.clear();
}
public void testDoSomething_secEnabled() throws Exception {
myController.doSomething();
}
推荐阅读
- javascript - 如何在jQuery中的点击功能上使用else if条件?
- python - 重命名多个数据框的列
- vba - 使用 VBA 将时间从 UTC 转换为 PST/PDT/CET 和 CEST
- javascript - 如何使用 java 脚本在新选项卡中打开数组中的链接?
- android - E/FirebaseInstanceId:无法解析目标意图服务,跳过类名实施和错误:未找到 ServiceIntent
- c++ - 是否可以使用右值引用作为 pimpl 句柄?
- javascript - 图像预览在动态添加/删除文件上传字段中不起作用
- reactjs - 为活动按钮 ReactJS 添加一个类
- c++ - 折叠 std::initializer_list 的构造函数的参数列表与“正常”折叠
- javascript - 有没有办法轻松检查图片网址是否有效?