【发布时间】:2021-08-27 20:32:57
【问题描述】:
问题是我的缓存中没有添加任何内容。我的课要大得多,所以我在这里提供了应该重现问题的最小示例。 假设我有一个字典类,它使用一些 initialService 来返回带有初始值的 hashMap。
public class Dictionary() {
@Inject
private InitialService initialService;
private Map<String, String> map;
public Map<String, String> constructMap() {
HashMap<String, String> initialMap = initialService.getHashMap("initialKey", "initialValue");
return initialMap;
}
public void saveConstructedMap() {
map = constructMap();
}
public Map<String, String> getMap() {
return map;
}
}
然后我用 mockito 进行测试。所以首先我使用saveConstructedMap() 方法保存地图,然后使用getMap() 获取地图,然后添加值。
我希望值在那里,但地图是空的。
即使我不将其保存为新值,但会添加 getMap() 所以 getMap().put(...)
public class DictionaryTest() {
@Mock
private InitialService initialService;
@InjectMocks
private Dictionary dictionary;
public void test() {
dictionary.saveConstructedMap();
HashMap<String, String> myMap = dictionary.getMap();
myMap.put("key","value");
assertTrue(myMap.containsKey("key")); //returns false (the entry is not added)
}
}
据我了解,Mock 只是模拟类,使其内部为空,但 @InjectMocks 注入指定的模拟并创建一个对象,但以正常方式(就像我会使用 Dictionary 的构造函数一样。所以所有方法和字段应该像普通类一样,而不是测试类。我在这里误解了什么吗?)
有谁知道我应该怎么做才能实现我想要的?
当然,我在setUp() 方法中有initMocks(this),它用@Before 注释,
【问题讨论】:
标签: java dependency-injection mockito java-ee-6 java-ee-5