如何编写Junit测试用例来测试GoogleAPI(目录api)的使用

如何编写Junit测试用例来测试GoogleAPI(目录api)的使用,junit,junit4,junit-rule,Junit,Junit4,Junit Rule,目前代码是这样开始的 Directory directory = DirectoryServiceFactory.getDirectoryService(); directory.groups().get(someEmail).execute(); 我不知道如何为它编写测试用例,甚至不知道是否应该编写测试用例。在这里编写测试用例到底意味着什么 理论上,您应该只测试自己的代码。如果您必须测试您的框架,那么您使用的框架是错误的。与Google API的远程连接和使用是您只能在集成测试中测试的东西

目前代码是这样开始的

Directory directory = DirectoryServiceFactory.getDirectoryService();

directory.groups().get(someEmail).execute();

我不知道如何为它编写测试用例,甚至不知道是否应该编写测试用例。在这里编写测试用例到底意味着什么

理论上,您应该只测试自己的代码。如果您必须测试您的框架,那么您使用的框架是错误的。与Google API的远程连接和使用是您只能在集成测试中测试的东西,而不是单元测试

因此,在本例中,我将尝试以一种方式封装您自己的代码,允许您将连接Google API的类的模拟版本放入其中,并在其中执行一些操作,例如编写
GoogleAppConnector接口
或类似的内容:

public interface GoogleAPIConnector {

    void connect();
    String doSomeWork(String email);

}
您将创建此接口的一个“真实”实现,它实际上连接到Google并完成真正的工作。测试这将是集成测试的范围。可能看起来像这样

public class GoogleAPIConnectorImpl {

    private Directory directory;

    @Override
    public void connect() {
        this.directory = DirectoryServiceFactory.getDirectoryService();
    }

    @Override
    public String doSomeWork(String email){
        return this.directory.groups().get(email).execute();
    }

}
对于单元测试,您将使用返回“假”数据的模拟对象,而不是真实的交易,允许您在假设google连接工作的情况下运行测试,测试围绕它编写的所有内容,例如(使用Mockito):

这样,您的单元测试将是快速的,并且不依赖于GoogleAPI(如果您的网络关闭,它们仍然会成功)。您的集成测试速度较慢,并且依赖于GoogleAPI,但由于它们不必经常运行(也不必使构建失败),这没关系

GoogleAPIConnector connector = mock(GoogleAPIConnector.class);
when(connector.doSomeWork("someone@example.com")).thenReturn("hello world");

SomeClass someClass = new SomeClass(""someone@example.com");
someClass.setConnector(connector);

String result = someClass.work();
assertThat(result, equalTo("hello world");

verify(connector, times(1)).doSomeWork("someone@example.com");