gpt4 book ai didi

java - Mockito 测试 - 我的测试用例失败的原因

转载 作者:行者123 更新时间:2023-12-01 19:00:02 25 4
gpt4 key购买 nike

昨天学了JUnit,今天学了Mockito

我写了一个简单的类;

public class FileOperations {
public boolean autoMove(){
List<byte[]> patterns = getListofPatterns();
for(byte[] pattern: patterns){
System.out.println(new String(pattern));
if(seekInHeader(pattern)){
//logic to move file of specific folder of specific extension
return true;
}
}
return false;
}

public boolean seekInHeader(byte[] pattern){
return false;
}

public List<byte[]> getListofPatterns(){
return null;
}
}

并尝试按如下方式进行测试

@Test
public void autoMoveTest(){
FileOperations fo = mock(FileOperations.class);//stub
List<byte[]> dummyPatterns = new ArrayList<byte[]>();//specify stub value
dummyPatterns.add("amit".getBytes());

when(fo.getListofPatterns()).thenReturn(dummyPatterns);
when(fo.seekInHeader(anyString().getBytes())).thenReturn(true);

System.out.println(new String(fo.getListofPatterns().get(0)));
System.out.println(fo.seekInHeader("amit".getBytes()));
System.out.println(fo.autoMove());
assertTrue(fo.autoMove());
}

输出:

amit

true

false

当我将seekHeader()设置为返回true时。为什么 fo.autoMove() 返回 false?

最佳答案

对于模拟,任何方法实际上都不会执行任何操作,除非您明确指定它们应该执行任何操作。模拟的全部要点是功能已被替换,要么被根本没有功能(默认),要么被您 stub 的功能替换。

模拟的默认功能是每个方法都不执行任何操作,然后返回 false (对于 boolean 值)、零(对于数字基元)、空集合或 null 。所以在这种情况下,autoMove将始终返回 false ,除非您将其 stub 以执行不同的操作。

使用模拟的整个想法是,您不要模拟您尝试测试的类 。相反,您可以模拟与其交互的其他类。因此,如果类 A 的方法调用类 B 的方法,并且您想参加考试 A ;那么你可以使用类 B 的模拟,并 stub B 的方法被调用。

关于java - Mockito 测试 - 我的测试用例失败的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com