【发布时间】:2018-07-04 08:22:44
【问题描述】:
我想为 Android Activity 类编写一个简单的单元测试。扩展 Activity 时测试运行良好,但是扩展 AppCompatActivity 时测试失败:
java.lang.NullPointerException 在 android.support.v7.app.AppCompatDelegateImplBase.(AppCompatDelegateImplBase.java:117) 在 android.support.v7.app.AppCompatDelegateImplV9.(AppCompatDelegateImplV9.java:149) 在 android.support.v7.app.AppCompatDelegateImplV14.(AppCompatDelegateImplV14.java:56) 在 android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:202) 在 android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:183) 在 android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:518) 在 android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:70) 在activity.MainActivity.onCreate(MainActivity.kt:15) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在activity.MainActivity.onCreate(MainActivity.kt:15)
MainActivity 代码:
class MainActivity : AppCompatActivity() {
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
finish()
}
}
使用 Mockito 测试代码:
private lateinit var mainActivitySpy: MainActivity
@Before
fun setUp() {
mainActivitySpy = spy(MainActivity())
}
@Test
fun `Test case`() {
mainActivitySpy.onCreate(mock())
verify(mainActivitySpy).finish()
}
我已尝试添加以下代码,但无济于事。
android {
...
testOptions {
unitTests.returnDefaultValues = true
}
}
有没有什么方法可以让这段代码使用唯一的 JUnit+Mockito 而没有其他测试框架,如 Roboelectric 等?
【问题讨论】:
标签: android unit-testing mockito