如何模拟git.push()或git()命令

时间:2018-01-22 15:49:51

标签: java git junit mockito wiremock

我想为JGit代码编写一个JUnit测试。在这段代码中,我使用JGit创建了本地文件和存储库。

我已经使用wiremock为我的方法的其余部分编写了JUnit测试,但是我对以下代码感到异常。

git.push().setCredentialsProvider(new UsernamePasswordCredentialsProvider(PortalConstants.USERNAME, PortalConstants.PASSWORD)).call();
git.close();

我收到此异常

org.eclipse.jgit.api.errors.JGitInternalException: Exception caught during execution of push command
    at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:183)

有没有办法可以模拟push命令,因为我只想在我的本地执行它。

1 个答案:

答案 0 :(得分:0)

您可以为JGit创建一个额外的界面并模拟它。

public class JGitTest {

    interface JGit {
        void push();
        void close();
    }

    private static class MyCustomService {
        private final JGit jGit;

        private MyCustomService(JGit jGit) {
            this.jGit = jGit;
        }

        public void execute() {
            jGit.push();
        }
    }

    private static class JGitProductionImpl implements JGit {
        @Override
        public void push() {
            //git().push();
        }

        @Override
        public void close() {
            //git().close();
        }
    }


    @Test
    public void jgitTest() {
        JGit jGitMock = Mockito.mock(JGit.class);
        MyCustomService myCustomService = new MyCustomService(jGitMock);
        myCustomService.execute();
        Mockito.verify(jGitMock, Mockito.times(1)).push();
    }
}