jmc*_*mcg 2 java unit-testing mockito jgit
我的问题是关于模拟RevCommitJGit 库中的对象。当简单地模拟这种类型的对象并定义它的行为时,我收到一个错误。例如:
RevCommit revCommitMock = mock(RevCommit.class);
Mockito.when(revCommitMock.getShortMessage()).thenReturn("ExampleMessage");
Run Code Online (Sandbox Code Playgroud)
这将导致一个NullPointerException.
也许,正确的方法是调用方法:
parse(RevWalk rw, byte[] raw)
Run Code Online (Sandbox Code Playgroud)
在对象的实例上RevCommit,但如何正确地做到这一点?我得到了NullPointerException解析类型的模拟对象RevWalk。感谢您提前提供的任何帮助。
为了避免这种情况NullPointerException,您需要完全模拟真实的行为RevCommit。为了使其在各个方面的行为都正确,您最终将重新构建实际的大部分内容RevCommit为了使其行为在各个方面都正确,您最终将在 JGit 中
这就是为什么我建议针对真实存储库运行测试。由于上述原因,通常不建议模拟您不拥有的类型(请参阅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
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅此处的另一个示例,该示例初始化存储库并使用 aTemporaryFolder进行清理:https://gist.github.com/rherrmann/5341e735ce197f306949fc58e9aed141
| 归档时间: |
|
| 查看次数: |
1838 次 |
| 最近记录: |