我正在实施 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
我得到了一个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)