Xamarin.Android中的测试活动

时间:2013-12-15 18:32:44

标签: android unit-testing xamarin.android xamarin

我想在活动生命周期中对一些交互进行单元测试(我正在研究数据绑定库,没有它就无法进行单元测试)。

Android在此主题上有一些好documentation。但是,我没有找到任何试图用Xamarin做这件事的人。 Xamarin中缺少android.test [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); } } 的许多内容。

到目前为止,我已尝试使用NUnit的Xamarin测试项目中的以下内容:

<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) 。我确定我错过了一些东西,因为我在这里处于未知的水域。

这是堆栈跟踪:

{{1}}

有人曾尝试过这个吗?

1 个答案:

答案 0 :(得分:2)

我认为Xamarin.Android尚不支持:https://bugzilla.xamarin.com/show_bug.cgi?id=6043

因为这些东西依赖于JUnit,所以它们不能将类绑定到C#。希望他们能让它运转起来。

我为我的情况所做的是重写我的库,所以你不必继承Activity,那么我就可以编写我的测试没问题了。