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