gpt4 book ai didi

junit - 将 MockWebServer 与 Robolectric 结合使用

转载 作者:行者123 更新时间:2023-12-04 14:25:01 25 4
gpt4 key购买 nike

我正在尝试使用 MockWebServer 和 Robolectric 对一些 API 调用进行单元测试。

我的测试类注释为:

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 23)

但是,在尝试构建 Retrofit 实例时,出现以下异常:
java.lang.NullPointerException
at android.os.Handler.__constructor__(Handler.java:229)
at android.os.Handler.<init>(Handler.java)
at retrofit2.Platform$Android$MainThreadExecutor.<init>(Platform.java:105)
at retrofit2.Platform$Android.defaultCallbackExecutor(Platform.java:97)
at retrofit2.Retrofit$Builder.build(Retrofit.java:556)

我用来构建改造实例的代码:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(mMockServer.url(""))
.addConverterFactory(GsonConverterFactory.create())
.build();

调用 .build() 时返回上述异常.

我该如何解决这个问题?

最佳答案

我有同样的问题。有一个关于根本原因的错误打开 here但在此期间,我决定使用 Robolectric 3.0 和 dave-r12 here 概述的解决方案这是创建我在下面包含的模拟。

@RunWith(RobolectricGradleTestRunner.class)
@Config(shadows = CreateOkHttpClientTest.MyNetworkSecurityPolicy.class)
public class CreateOkHttpClientTest {

@Test
...

@Implements(NetworkSecurityPolicy.class)
public static class MyNetworkSecurityPolicy {

@Implementation
public static NetworkSecurityPolicy getInstance() {
try {
Class<?> shadow = MyNetworkSecurityPolicy.class.forName("android.security.NetworkSecurityPolicy");
return (NetworkSecurityPolicy) shadow.newInstance();
} catch (Exception e) {
throw new AssertionError();
}
}

@Implementation
public boolean isCleartextTrafficPermitted() {
return true;
}
}

}

关于junit - 将 MockWebServer 与 Robolectric 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38047690/

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