小编JJa*_*iMS的帖子

测试导航组件:“没有 NavController”

我正在实施 Espresso 测试。我正在使用带有NavGraph作用域的 Fragment ViewModel。问题是当我尝试测试时,Fragment我得到了一个,IllegalStateException因为Fragment没有NavController设置。我该如何解决这个问题?

class MyFragment : Fragment(), Injectable {

    private val viewModel by navGraphViewModels<MyViewModel>(R.id.scoped_graph){
        viewModelFactory
   }

    @Inject
    lateinit var viewModelFactory: ViewModelProvider.Factory
    //Other stuff
}
Run Code Online (Sandbox Code Playgroud)

测试类:

class FragmentTest {

    class TestMyFragment: MyFragment(){
        val navMock = mock<NavController>()

        override fun getNavController(): NavController {
            return navMock
        }
    }

    @Mock
    private lateinit var viewModel: MyViewModel
    private lateinit var scenario: FragmentScenario<TestMyFragment>

    @Before
    fun prepareTest(){
        MockitoAnnotations.initMocks(this)

    scenario = launchFragmentInContainer<TestMyFragment>(themeResId = R.style.Theme_AppCompat){
        TestMyFragment().apply {
            viewModelFactory …
Run Code Online (Sandbox Code Playgroud)

android android-testing android-espresso android-viewmodel android-architecture-components

7
推荐指数
1
解决办法
3247
查看次数

有效证书上的 SSL 连接错误

我得到了一个javax.net.ssl.SSLHandshakeException: Chain validation failed,当我尝试连接到我的 API 服务器时,证书现在是有效的,在我得到的堆栈跟踪中Caused by: java.security.cert.CertPathValidatorException: Response is unreliable: its validity interval is out-of-date,证书是有效的,它在 iOS 和网站上运行,问题只是在安卓中。

我正在使用 Retrofit,这是客户端一代

fun generateClient(): OkHttpClient {
        val client = OkHttpClient.Builder()
        client.addInterceptor {
            val request = it.request()
            val url = request.url().newBuilder()
                .build()
            val newRequest = it.request().newBuilder().url(url).build()
            it.proceed(newRequest)
        }
        client.connectTimeout(10, TimeUnit.SECONDS)
        client.readTimeout(30, TimeUnit.SECONDS)
        return client.build()
    }
Run Code Online (Sandbox Code Playgroud)

完整的痕迹是这样的

javax.net.ssl.SSLHandshakeException: Chain validation failed
    at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:361)
    at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:302)
    at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:270)
    at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:162)
    at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:257)
    at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:135)
    at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:114)
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    at …
Run Code Online (Sandbox Code Playgroud)

java ssl android kotlin retrofit2

2
推荐指数
1
解决办法
1840
查看次数