我想对活动生命周期的一些交互进行单元测试(我正在开发一个数据绑定库,没有它就无法进行单元测试)。
安卓也有一些不错的文档 http://developer.android.com/tools/testing/activity_testing.html就此主题而言。但是,我还没有发现任何人尝试使用 Xamarin 执行此操作。许多classes http://developer.android.com/reference/android/test/package-summary.html in android.test
Xamarin 中缺失。
到目前为止,我已经在使用 NUnit 的 Xamarin 测试项目中尝试了如下操作:
[TestFixture]
public class MyActivityTests
{
private TestActivity _activity;
private TestViewModel _viewModel;
private Instrumentation _instrumentation;
[SetUp]
public void SetUp()
{
_viewModel = new TestViewModel();
_activity = new TestActivity();
_instrumentation = new InstrumentationTestRunner();
_instrumentation.Start();
_instrumentation.CallActivityOnCreate(_activity, Bundle.Empty);
}
}
稍后我会进行使用该活动的测试。
我还必须在清单中设置以下内容:
<application android:label="My Tests">
<uses-library android:name="android.test.runner" />
</application>
问题是,在我上面的单元测试中Java.Lang.NullPointerException
被扔到我的活动中base.OnCreate()
方法。我确信我错过了一些东西,因为我正处于未知的水域。
这是堆栈跟踪:
[MonoDroid] UNHANDLED EXCEPTION: Java.Lang.NullPointerException: Exception of type 'Java.Lang.NullPointerException' was thrown.
[MonoDroid] at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (intptr,intptr,intptr,Android.Runtime.JValue[]) [0x00084] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.10.2-branch/35376881/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:895
[MonoDroid] at Android.App.Activity.OnCreate (Android.OS.Bundle) [0x00070] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.10.2-branch/35376881/source/monodroid/src/Mono.Android/platforms/android-18/src/generated/Android.App.Activity.cs:2193
[MonoDroid] at XamBind.Droid.Tests.TestActivity.OnCreate (Android.OS.Bundle) [0x00003] in /Users/jonathanpeppers/Desktop/MonoTouch/XamBind/XamBind.Droid.Tests/Activities/TestActivity.cs:19
[MonoDroid] at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) [0x00011] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.10.2-branch/35376881/source/monodroid/src/Mono.Android/platforms/android-18/src/generated/Android.App.Activity.cs:2178
[MonoDroid] at (wrapper dynamic-method) object.640629b6-d042-45f3-840b-28e31832a912 (intptr,intptr,intptr) <IL 0x00017, 0x0001f>
[MonoDroid]
[MonoDroid] --- End of managed exception stack trace ---
[MonoDroid] java.lang.NullPointerException
[MonoDroid] at android.app.Activity.onCreate(Activity.java:884)
[MonoDroid] at xambind.droid.tests.TestActivity.n_onCreate(Native Method)
[MonoDroid] at xambind.droid.tests.TestActivity.onCreate(TestActivity.java:28)
[MonoDroid] at android.app.Activity.performCreate(Activity.java:5133)
[MonoDroid] at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
[MonoDroid] at mono.android.view.View_OnClickListenerImplementor.n_onClick(Native Method)
[MonoDroid] at mono.android.view.View_OnClickListenerImplementor.onClick(View_OnClickListenerImplementor.java:29)
[MonoDroid] at android.view.View.performClick(View.java:4240)
[MonoDroid] at android.view.View$PerformClick.run(View.java:17721)
[MonoDroid] at android.os.Handler.handleCallback(Handler.java:730)
[MonoDroid] at android.os.Handler.dispatchMessage(Handler.java:92)
[MonoDroid] at android.os.Looper.loop(Looper.java:137)
[MonoDroid] at android.app.ActivityThread.main(ActivityThread.java:5103)
[MonoDroid] at java.lang.reflect.Method.invokeNative(Native Method)
[MonoDroid] at java.lang.reflect.Method.invoke(Method.java:525)
[MonoDroid] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
[MonoDroid] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
[MonoDroid] at dalvik.system.NativeStart.main(Native Method)
以前有人尝试过吗?