我的问题是关于从JGit库中模拟RevCommit
对象。
当简单地模拟这种类型的对象并定义它的行为时,我得到一个错误。例如:
RevCommit revCommitMock = mock(RevCommit.class);
Mockito.when(revCommitMock.getShortMessage()).thenReturn("ExampleMessage");
这将产生NullPointerException
。
正确地做到这一点的方法可能是调用方法:
parse(RevWalk rw, byte[] raw)
在RevCommit
对象的实例上,但如何正确执行?我得到NullPointerException
解析类型为RevWalk
的模拟对象。
感谢您提前提供任何帮助。
答案 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