我想在活动生命周期中对一些交互进行单元测试(我正在研究数据绑定库,没有它就无法进行单元测试)。
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}}
有人曾尝试过这个吗?
答案 0 :(得分:2)
我认为Xamarin.Android尚不支持:https://bugzilla.xamarin.com/show_bug.cgi?id=6043
因为这些东西依赖于JUnit,所以它们不能将类绑定到C#。希望他们能让它运转起来。
我为我的情况所做的是重写我的库,所以你不必继承Activity
,那么我就可以编写我的测试没问题了。