【问题标题】:Is it possible to use MessagingCenter or Intents with Xamarin.UI tests?是否可以将 MessagingCenter 或 Intents 与 Xamarin.UI 测试一起使用?
【发布时间】:2019-08-14 16:12:54
【问题描述】:

我正在为我的 Xamarin.Forms 应用程序编写 Xamarin.UI 测试。我想知道是否可以通过测试来模拟来自 MessagingCenter 的消息?或者可能发送一个将被 Android 应用程序捕获的 Intent?

我想模拟一些硬件的输入/输出,它与我的应用程序内的 MessagingCenter 通信它的状态。

如果有人遇到过类似情况或确定无法做到这一点,如果他们分享他们的经验,我会很高兴。

非常感谢:)

【问题讨论】:

  • 嗨,我很好奇,为什么要在 Xamarin.UI 测试中使用 MessagingCenter?
  • 嘿,正如我在问题中提到的,我想模拟一些特定硬件的输出,看看 UI 是如何响应的。硬件通过意图与 Xamarin.Android 应用程序通信,然后我使用 MessagingCenter 将这些事件发送到 Xamarin.Forms 应用程序。
  • 例如,我想看看,如果硬件报告状态 X,是否会出现弹出窗口,或者如果硬件报告状态 Y 时某些标签会改变颜色 :)
  • 好的,谢谢你的解释。如果在 Xamarin.Android 应用程序中,这应该是可能的。您可以显示一些有问题的代码。
  • 嘿,我已经设法解决了这个问题。你可以看看我的回答。我以前对这个后门方法一无所知,但它们确实是帮助 UI 测试的好东西:)

标签: xamarin xamarin.forms xamarin.uitest messagingcenter


【解决方案1】:

所以,我已经设法实现了我一直在寻找一个我直到现在才知道的整洁的东西 -> Backdoor methods

我在我的 MainActivity.cs 中添加了一个后门方法,它从 UITests 接收硬件状态,然后通过 MessagingCenter 将其发送到我的 Forms 应用程序。

MainActivity.cs 中的后门方法:

[Export("BackdoorSendStatus")]
public void BackdoorSendStatus(string status)
{
    // In through the backdoor - do some work.
    MessagingCenter.Send(App.Instance, "StatusTopic", status);
}

使用此方法的测试用例:

[Test]
public void Test_Backdoor()
{
    App.Invoke("BackdoorSendStatus", "OFFLINE");
    Thread.Sleep(5000);
    App.Invoke("BackdoorSendStatus", "ONLINE");
}

【讨论】:

    猜你喜欢
    • 2021-02-04
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    相关资源
    最近更新 更多