gpt4 book ai didi

android - Xamarin.Android 中的测试 Activity

转载 作者:太空狗 更新时间:2023-10-29 13:26:50 25 4
gpt4 key购买 nike

我想对 Activity 生命周期中的一些交互进行单元测试(我正在开发一个数据绑定(bind)库,没有它就无法进行单元测试)。

Android 有一些好的documentation就此主题而言。但是,我还没有发现任何人试图用 Xamarin 做到这一点。许多 classes Xamarin 中缺少 android.test

到目前为止,我已经在使用 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);
}
}

稍后我会有使用该 Activity 的测试。

我还必须在 list 中设置以下内容:

<application android:label="My Tests">
<uses-library android:name="android.test.runner" />
</application>

问题是,在我上面的单元测试中,我的 Activity 的 base.OnCreate() 方法中抛出了一个 Java.Lang.NullPointerException。我确定我错过了什么,因为我正处于未知领域。

这是堆栈跟踪:

[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)

有人试过吗?

最佳答案

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

因为这些东西依赖于 JUnit,所以他们不能将类绑定(bind)到 C#。希望他们能让它正常工作并即将到来。

我针对我的情况所做的是重写我的库,这样您就不必子类化 Activity,这样我就可以毫无问题地编写测试了。

关于android - Xamarin.Android 中的测试 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20598130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com