RevCommit JGit mock

时间:2018-01-23 16:16:23

标签: java unit-testing mockito jgit

我的问题是关于从JGit库中模拟RevCommit对象。 当简单地模拟这种类型的对象并定义它的行为时,我得到一个错误。例如:

RevCommit revCommitMock = mock(RevCommit.class);        
Mockito.when(revCommitMock.getShortMessage()).thenReturn("ExampleMessage");

这将产生NullPointerException

正确地做到这一点的方法可能是调用方法:

parse(RevWalk rw, byte[] raw) 

RevCommit对象的实例上,但如何正确执行?我得到NullPointerException解析类型为RevWalk的模拟对象。 感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:3)

要避免使用NullPointerException,您需要完全模拟真实RevCommit的行为。为了在所有方面都能正确行事,您最终将在JGit中重新构建实际RevCommit实现的大部分内容。

这就是我建议针对真实存储库运行测试的原因。出于上述原因,通常不建议您模拟不属于您的类型(请参阅https://github.com/mockito/mockito/wiki/How-to-write-good-tests)。

使用JGit创建测试存储库非常简单:

public class JGitTest {

  @Rule
  public TemporaryFolder tempFolder = new TemporaryFolder();

  private Git git;

  @Before
  public void setUp() throws GitAPIException {
    git = Git.init().setDirectory( tempFolder.getRoot() ).call();
  }

  @After
  public void tearDown() {
    git.getRepository().close();
  }

  @Test
  public void testFirst() {
    // with 'git' you have access to a fully functional repository
  }
}

请点击此处查看另一个初始化存储库并使用TemporaryFolder进行清理的示例:https://gist.github.com/rherrmann/5341e735ce197f306949fc58e9aed141