Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用mockito/powermockito模拟IamRequest impl类?_Java_Junit_Mockito_Powermock_Powermockito - Fatal编程技术网

Java 如何使用mockito/powermockito模拟IamRequest impl类?

Java 如何使用mockito/powermockito模拟IamRequest impl类?,java,junit,mockito,powermock,powermockito,Java,Junit,Mockito,Powermock,Powermockito,IamRequestImpl.java public class IamRequestImpl<E> extends IamRequest { public IamRequestImpl(Iam iam, String s, String s1, Object o, Class aClass) { super(iam, s, s1, o, aClass); } } 公共类IamRequestImpl扩展IamRequest{ 公共Iam请求impl(

IamRequestImpl.java

public class IamRequestImpl<E> extends IamRequest {
    public IamRequestImpl(Iam iam, String s, String s1, Object o, Class aClass) {
        super(iam, s, s1, o, aClass);
    }
}
公共类IamRequestImpl扩展IamRequest{
公共Iam请求impl(Iam Iam,字符串s,字符串s1,对象o,类aClass){
超级(iam、s、s1、o、aClass);
}
}
GcsHelper.java

public <T> T getServiceAccountKey(IamRequestInitializer req, Iam iam, String requestString,
            String api) throws IOException {
        IamRequestImpl<String> iamRequestImpl= new IamRequestImpl<String>(iam, HttpMethods.POST, requestString, String.class,
                ServiceAccountKey.class);
        iamRequestImpl.setKey(api);
        iamRequestImpl.setFields(SchedulerConstants.JSON_KEY_FIELDS);
        req.initializeJsonRequest(iamRequestImpl);
        return (T) request.execute();
    }
public T getServiceAccountKey(Iam请求初始值设定项req、Iam Iam、字符串请求字符串、,
字符串api)引发IOException{
IamRequestImpl IamRequestImpl=新IamRequestImpl(iam,HttpMethods.POST,requestString,String.class,
ServiceAccountKey.class);
iamRequestImpl.setKey(api);
iamRequestImpl.setFields(SchedulerConstants.JSON_KEY_字段);
请求初始化请求(iamRequestImpl);
return(T)request.execute();
}
GCSHelperTest.java

@RunWith(PowerMockRunner.class)
@PrepareForTest({ IamRequestImpl.class, ServiceAccountKey.class})
@Test
    public void testGetServiceAccountKeyOnSuccess() throws Exception{
        IamRequestInitializer mockIamRequestInitializer = Mockito.mock(IamRequestInitializer.class);
        IamRequestImpl<String> mockIamRequestImpl = PowerMockito.mock(IamRequestImpl.class);
        PowerMockito.whenNew(IamRequestImpl.class).withAnyArguments().thenReturn(mockIamRequestImpl);
        when(mockIamRequestImpl.setKey("apiKey")).thenReturn(mockIamRequestImpl);
        when(mockIamRequestImpl.setFields("apiKey")).thenReturn(mockIamRequestImpl);
        Mockito.doNothing().when(mockIamRequestInitializer).initializeJsonRequest(mockIamRequestImpl);
        spyGCSUtils.getServiceAccountKey(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
    }
@RunWith(PowerMockRunner.class)
@PrepareForTest({IamRequestImpl.class,ServiceAccountKey.class})
@试验
public void testGetServiceAccountKeyOnSuccess()引发异常{
IamRequestInitializer mockIamRequestInitializer=Mockito.mock(IamRequestInitializer.class);
IamRequestImpl mockIamRequestImpl=PowerMockito.mock(IamRequestImpl.class);
PowerMockito.whenNew(IamRequestImpl.class).withAnyArguments()。然后返回(mockIamRequestImpl);
当(mokiamrequestimpl.setKey(“apiKey”))时,返回(mokiamrequestimpl);
when(mockIamRequestImpl.setFields(“apiKey”)。然后返回(mockIamRequestImpl);
Mockito.doNothing().when(mockIamRequestInitializer).initializeJsonRequest(mockIamRequestImpl);
getServiceAccountKey(Mockito.any(),Mockito.any(),Mockito.any(),Mockito.any(),Mockito.any());
}

当运行
testGetServiceAccountKeyOnSuccess
时,面向nullpointerException的测试用例,因为
iamRequestImpl
不是模拟

尝试将
Mockito.any()
转换为特定的
对象
,如下所示

spyGCSUtils.getServiceAccountKey((IamRequestInitializer)Mockito.any(), (Iam)Mockito.any(), Mockito.anyString(), Mockito.anyString());

由于
getServiceAccountKey(IamRequestInitializer,Iam,String,String)

这看起来基本上是一个结构,您不应该首先模拟它。那么我如何为这个场景编写测试用例呢?给它真正的字符串和对象,这就是为什么。它需要一些机密信息,比如API密钥等,我们作为开发人员无法访问这些信息。在这种情况下我如何继续?然后在构造函数中将这些位模拟为参数,但不要模拟IamRequestImpl本身。或者只是使用完全虚假的数据,而不是真实的API密钥,至少是真实的字符串对象。