java—用mockito和jgit编写单元测试

des4xlb0  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(382)

在测试代码时,我不熟悉mockito/powermockito(因为它是一个静态方法)。我无法为这个方法编写测试,因为它包含文件列表和jgit方法,有人能告诉我如何为这个特殊的方法执行测试吗。

public static String addAndCommitUntrackedChanges(final File gitFile, final String branchName,
                                                      final String commitMessage, List<String> filesList)
            throws IOException, GitAPIException {
        final Git openedRepo = Git.open(gitFile);
        openedRepo.checkout().setCreateBranch(true).setName(branchName).call();

        AddCommand add = openedRepo.add();
       for (final String file: filesList) {
          Path filepath = Paths.get(file); //file absolute Path
          final Path repoBasePath = Paths.get("/", "tmp", "PackageName"); //file base common path
          final Path relative = repoBasePath.relativize(filepath); //Remove the repoBasePath from filpath
           add.addFilepattern(relative.toString());
       }

        add.call();
        // Create a new commit.
        RevCommit commit = openedRepo.commit()
                .setMessage(commitMessage)
                .call();

        //Return the Latest Commit_Id
        return ObjectId.toString(commit.getId());
    }

提前谢谢!

ssm49v7z

ssm49v7z1#

您应该避免使用静态方法。您将如何测试的客户 addAndCommitUntrackedChanges 如果你不能嘲笑它?
使 addAndCommitUntrackedChanges 更易于测试的是,引入gitwrapper接口:

interface GitWrapper {
  Git open(File f);
}

通过实施:

class DefaultGitWrapper implements GitWrapper {
  public Git open(File f) {
    return Git.open(f);
  }
}

并将方法的签名更改为:

public static String addAndCommitUntrackedChanges(
  GitWrapper gitWrapper,
  final File gitFile,
  final String branchName,
  final String commitMessage,
  List<String> filesList)

和使用 GitWrapper 而不是的静态示例 Git .
然后,您可以模拟编写单元测试时需要模拟的内容。

相关问题