【问题标题】:Trying to invoke a backdoor method in xamarin.uitests getting a failure尝试在 xamarin.uitests 中调用后门方法失败
【发布时间】:2021-01-12 15:16:15
【问题描述】:

我有一个 xamarin.uitest 项目和一个应用程序项目, 在应用程序项目的主要活动中添加: MainLauncher = true 和方法:

    [Export("MyInvokeMethod")]
    public void MyInvokeMethod()
    {
        Console.WriteLine("TEST");
    }

并在我的项目测试中添加了一个只调用该方法的测试:

    [Test]
    public void MyInvokeMethodTest()
    {
        _app.Invoke("MyInvokeMethod");
    }

我得到了: System.Exception:调用 MyInvokeMethod 失败,结果:错误 未找到此类方法:MyInvokeMethod()

我在这里做了所有事情:https://docs.microsoft.com/en-us/appcenter/test-cloud/frameworks/uitest/features/backdoors

在 iOS 中也试过: 在 AppDelegate 中:

在测试项目中:

[Test]
public void MyInvokeMethodTest()
{
    _app.Invoke("RefreshMethod:");
}

仍然没有任何改变 我做错了什么?

【问题讨论】:

    标签: c# xamarin.forms xamarin.uitest


    【解决方案1】:

    按照以下步骤操作。我用您提供的代码进行了测试。对我来说效果很好。

    1. 创建名为 UITest 的 Xamarin.forms 项目,并在 MainActivity 中添加以下代码。可能需要在 Xamarin.Android 项目中添加对 Mono.Android.Export.dll 程序集的引用。

      public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
      {
         protected override void OnCreate(Bundle savedInstanceState)
           {
                ......
               LoadApplication(new App());
           }
       [Java.Interop.Export("MyInvokeMethod")]
       public void MyInvokeMethod()
       {
           Console.WriteLine("TEST");
       }
      }       
      
    2. 在同一解决方案中创建名为 UITest1 的 UITest 项目。然后使用UITest.Android 添加引用。

    • AppInitializer.cs 中,在StartApp 方法中添加ApkFile

      public static IApp StartApp(Platform platform)
       {
           if (platform == Platform.Android)
           {
               return ConfigureApp.Android
                    .EnableLocalScreenshots()
                    //.InstalledApp("com.companyname.app2")
                    .ApkFile(@"....\UITest\UITest\UITest.Android\bin\Release\com.companyname.uitest.apk")
                    .StartApp();
           }
      
           return ConfigureApp.iOS.StartApp();
       }
      
    • Tests.cs中添加下面的代码。

      [Test]
        public void InvokeTest()
        {    
            // Invoke the backdoor method MainActivity.MyBackDoorMethod
            app.Invoke("MyInvokeMethod");
        }
      
    1. 在测试资源管理器中,您可以运行测试。

    【讨论】:

    • 我有一个带有 android 应用程序的项目和另一个不在同一个解决方案中的测试项目有没有办法做到这一点?
    • 将项目引用从 UITest 项目添加到 Xamarin.Android 项目。
    • 我的团队领导不喜欢这个解决方案,所以我什至没有尝试:(
    • 我提供的代码用于修复您的问题中的错误。如果您对此仍有疑问,请随时告诉我。
    • 我也在不同的项目中尝试过 iOS 没有成功:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多