Java 使用mockito。试图验证是否使用了我的方法
我使用Mockito和JUnit5。我有一个计算字符串中不同字符的小程序。我有一个映射形式的缓存,如果输入字符串之前已经处理过,则从缓存中拾取结果。 我的目标是使用Mockito编写一个测试,以验证是否从缓存中拾取了结果(如果字符串之前已经处理过)。我不知道如何正确使用verifymockito方法。 这是我的密码:Java 使用mockito。试图验证是否使用了我的方法,java,unit-testing,mockito,junit5,Java,Unit Testing,Mockito,Junit5,我使用Mockito和JUnit5。我有一个计算字符串中不同字符的小程序。我有一个映射形式的缓存,如果输入字符串之前已经处理过,则从缓存中拾取结果。 我的目标是使用Mockito编写一个测试,以验证是否从缓存中拾取了结果(如果字符串之前已经处理过)。我不知道如何正确使用verifymockito方法。 这是我的密码: public class CounterDecorator implements CharCounter{ Cache cache; CharCounter cou
public class CounterDecorator implements CharCounter{
Cache cache;
CharCounter counter;
public CounterDecorator(Cache cache, CharCounter counter) {
this.cache = cache;
this.counter=counter;
}
@Override
public Map<Character, Integer> count(String text) {
if(!cache.contains(text)) {
System.out.println("New entry in cache");
cache.putText(text, counter.count(text));
}
return cache.getText(text);
}
}
public class Cache {
private Map <String, Map<Character, Integer>> cache = new HashMap <>();
public void putText(String text, Map <Character, Integer> result) {
cache.put(text, result);
}
public Map<Character, Integer> getText(String text) {
return cache.get(text);
}
public boolean contains(String text) {
return cache.containsKey(text);
}
}
公共类CounterDecorator实现CharCounter{
缓存;
CharCounter计数器;
公共计数器装饰器(缓存、CharCounter计数器){
this.cache=cache;
this.counter=计数器;
}
@凌驾
公共地图计数(字符串文本){
如果(!cache.contains(text)){
System.out.println(“缓存中的新条目”);
cache.putText(text,counter.count(text));
}
返回cache.getText(text);
}
}
公共类缓存{
私有映射缓存=newhashmap();
public void putText(字符串文本、映射结果){
cache.put(文本、结果);
}
公共映射getText(字符串文本){
返回cache.get(文本);
}
公共布尔包含(字符串文本){
返回cache.containsKey(文本);
}
}
和测试:
@ExtendWith(MockitoExtension.class)
class DecoratorTest {
@Mock
Cache mcache;
@Mock
CharCounter mcharcounter;
@InjectMocks
CounterDecorator decorator;
@Test
void testWhenCacheIsNotEmpty() {
Map<Character, Integer> testMap = Collections.emptyMap();
verify(mcache, atLeastOnce()).putText("some string", testMap);
}
}
@ExtendWith(MockitoExtension.class)
类装饰测试{
@嘲弄
Cache-mcache;
@嘲弄
CharCounter-mcharcounter;
@注射模拟
反装饰;
@试验
void testWhenCacheIsNotEmpty(){
Map testMap=Collections.emptyMap();
验证(mcache,atlestOnce()).putText(“某些字符串”,testMap);
}
}
我肯定我用错了Mockito。但我不知道如何解决我的问题。先谢谢你
编辑。我稍微编辑了一下我的测试部分:删除了那个混乱的映射实例化。两个测试的测试设置完全相同,但断言不同。我猜第二个测试的设置是错误的,但我真的不知道整数是什么,也不确定我是否正确理解了你的问题。是否正在尝试检查是否使用了缓存的值?如果您对缓存指标感兴趣,请参考PS:Mockito用于单元测试,您正在尝试进行集成测试。@kulsin您的链接似乎与此问题无关。他们编写了自己的
缓存
类,现在试图验证它是否正常工作。因此,这是一个单元测试,与您链接的Spring引导问题无关。现在只有一个测试可以验证负责在缓存中保存数据的方法只调用了一次。现在,您的代码实际上从未执行过任何代码。您忘记调用decorator
两个测试的测试设置完全相同,但您的断言不同。我猜第二个测试的设置是错误的,但我真的不知道整数是什么,也不确定我是否正确理解了你的问题。是否正在尝试检查是否使用了缓存的值?如果您对缓存指标感兴趣,请参考PS:Mockito用于单元测试,您正在尝试进行集成测试。@kulsin您的链接似乎与此问题无关。他们编写了自己的缓存
类,现在试图验证它是否正常工作。因此,这是一个单元测试,与您链接的Spring引导问题无关。现在只有一个测试可以验证负责在缓存中保存数据的方法只调用了一次。现在,您的代码实际上从未执行过任何代码。你忘了给装饰师打电话了