即使指定不这样做,Mockito 也会调用方法

问题描述 投票:0回答:1

这是我需要存根的方法:

 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>
java mockito junit5 javaparser
1个回答
0
投票

Mockito 不使用静态方法进行模拟。 要么从方法中删除 static 关键字以使mockito起作用,要么按照https://www.baeldung.com/mockito-mock-static-methods

使用方法
© www.soinside.com 2019 - 2024. All rights reserved.