gpt4 book ai didi

java - 如何模拟API的静态方法

转载 作者:行者123 更新时间:2023-11-28 20:53:16 25 4
gpt4 key购买 nike

您好,这是我的测试方法:

public String getRequestBuilder(String foo1) {
RequestBuilder RequestBuilder = ClientRequest.authorizationProvider(AuthProviderType.footype);
String locationURI = someclassmethod.getLocationURI(RequestBuilder, foo, foo1);
return locationURI;
}

这是我的测试用例:

@Test
public void test_foo() {
when(someotherclass.getLocationURI(Matchers.eq(mockRequestBuilder), Matchers.eq("foo"),
Matchers.eq("foo1"))).thenReturn("locationURI");
assertEquals("locationURI", Properties.getRequestBuilder("foo1"));
}

在方法中

RequestBuilder RequestBuilder = ClientRequest.authorizationProvider(AuthProviderType.foo);

是API提供的静态方法。我不想为此使用 PowerMockito。如果我使用

Matchers.any() 

代替

Matchers.eq(mockRequestBuilder) 

测试用例通过。但是使用 Matchers.any 不会为我提供确切的值。有什么办法可以处理这个测试用例吗? Foo 是我们从另一个类方法中获取的值。

最佳答案

您仍然可以使用 ArgumentCaptor 检查传递的值.

@Test
public void test_foo() {
ArgumentCaptor<RequestBuilder> reqCaptor = ArgumentCaptor.forClass(RequestBuilder.class);
when(someotherclass.getLocationURI(any(RequestBuilder.class), anyString(), anyString())).thenReturn("locationURI");
assertEquals("locationURI", Properties.getRequestBuilder("foo1"));
verify(someotherclass).getLocationURI(reqCaptor.capture(), "foo1", "foo2");
//Here you can check that reqCaptor.getValue() is equals to expected RequestBuilder and fail the test if not.
}

在这种情况下,您不需要使用 PowerMock 来模拟静态方法。

关于java - 如何模拟API的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36818123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com