Java 如何模拟GoogleCredential来测试我的业务逻辑

Java 如何模拟GoogleCredential来测试我的业务逻辑,java,unit-testing,mockito,google-api-java-client,Java,Unit Testing,Mockito,Google Api Java Client,我正在为我的一个应用程序编写一个单元测试,其中一部分需要模拟GoogleAPI java客户端的GoogleCredential对象。我们使用服务帐户在SOA中的服务之间进行身份验证。我想做一些类似的事情: GoogleCredential cred = mock(GoogleCredential.class); when(cred.refreshToken()).thenReturn(true); 但是我在“when”调用期间收到一个错误,指示GoogleCredential对象内部的“lo

我正在为我的一个应用程序编写一个单元测试,其中一部分需要模拟GoogleAPI java客户端的GoogleCredential对象。我们使用服务帐户在SOA中的服务之间进行身份验证。我想做一些类似的事情:

GoogleCredential cred = mock(GoogleCredential.class);
when(cred.refreshToken()).thenReturn(true);

但是我在“when”调用期间收到一个错误,指示GoogleCredential对象内部的“lock”实例为null。有什么方法可以让Mockito成功地存根方法调用吗?

好的,所以我没有意识到所讨论的方法是“final”,所以我不得不使用PowerMockito来存根final方法。因此,由于我使用的是TestNG,我将类签名修改为“扩展PowerMockTestCase”,并添加了类注释“@PrepareForTest(GoogleCredential.class)”。。。最后,在试验方法中:

PowerMockito.stub(credentials.getClass().getMethod("refreshToken")).toReturn(true);

这些更改允许对方法进行模拟/存根以进行测试。

您希望能够使用模拟凭据访问真实的Google服务器,还是正在运行本地(模拟)测试服务器?我不希望从测试中访问真实凭据。我只希望在调用“refreshToken”方法时测试我的代码。我不期望Google Credential中的任何逻辑能够运行。