尝试模拟静态对象GoogleSignIn.getClient()
方法,但从initialize()
方法得到以下错误:getClient(context, gso) must not be null java.lang.NullPointerException: getClient(context, gso) must not be null
这是被测试的班级
package com.example.hellogooglesignin
import android.content.Context
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInClient
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
data class UserAccount(val context: Context) {
private lateinit var googleSignInClient: GoogleSignInClient
fun initialize() {
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build()
googleSignInClient = GoogleSignIn.getClient(context, gso)
}
}
和单元测试代码
package com.example.hellogooglesignin
import android.content.Context
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInClient
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.mockito.ArgumentMatchers.any
import org.mockito.Mock
import org.mockito.Mockito
class GoogleSignInTest {
@Mock
private lateinit var googleSignInClient: GoogleSignInClient
@Mock
private lateinit var context: Context
@Before
fun setup() {
googleSignInClient = Mockito.mock(GoogleSignInClient::class.java)
context = Mockito.mock(Context::class.java)
}
@Test
fun testInitialize() {
Mockito.mockStatic(GoogleSignIn::class.java).use { ms ->
ms.`when`<GoogleSignInClient> { GoogleSignIn.getClient(any(), any()) }.thenReturn(googleSignInClient)
val account = UserAccount(context)
account.initialize()
assertEquals(1, 1)
}
}
}
GoogleSignInClient
返回的模拟对象不为null:
你知道吗?
使用:
implementation 'com.google.android.gms:play-services-auth:20.5.0'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.mockito:mockito-core:4.5.1'
testImplementation 'org.mockito:mockito-inline:3.5.6'
1条答案
按热度按时间a6b3iqyw1#
通过替换解决
GoogleSignIn.getClient(any(), any())
与
GoogleSignIn.getClient(any(Context::class.java), any(GoogleSignInOptions::class.java))
。