这是我需要存根的方法:
public static List<Path> getDiffedFilePaths(String repoDirectory, String relativeDirectoryPath) {
List<Path> diffedFiles = new ArrayList<>();
try {
ProcessBuilder processBuilder = new ProcessBuilder("git", "diff", "--name-only", relativeDirectoryPath);
processBuilder.directory(new File(repoDirectory));
Process process = processBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
diffedFiles.add(Paths.get(repoDirectory, line));
}
process.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
return diffedFiles;
}
这就是我存根的方式:
@Test
void testProcessCompilationUnitWithParamEnum() {
try {
AnnotationModifier modifier = new AnnotationModifier();
AnnotationModifier modifierSpy = Mockito.spy(modifier);
List<Path> mockDiffedFiles = Arrays.asList(
Path.of("mocked/file/path1"),
Path.of("mocked/file/path2")
);
Mockito.doReturn(mockDiffedFiles).when(modifierSpy).getDiffedFilePaths(Mockito.anyString(), Mockito.anyString());
// call the main method which consumes `getDiffedFilePaths`
该方法甚至不应该被调用,但它确实被调用了。什么可能导致此问题? 我得到的例外是:
java.io.IOException:无法运行程序“git”(在目录“”中):错误=2,没有这样的文件或目录
Mockito版本:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>4.10.0</version> <!-- Use the latest version -->
<scope>test</scope>
</dependency>
Mockito 不使用静态方法进行模拟。 要么从方法中删除 static 关键字以使mockito起作用,要么按照https://www.baeldung.com/mockito-mock-static-methods
使用方法