【问题标题】:Can Xamarin UITest backdoors return a value on iOS?Xamarin UITest 后门可以在 iOS 上返回值吗?
【发布时间】:2019-08-01 16:01:52
【问题描述】:

我正在为 Xamarin Forms 移动应用程序编写自动化测试。由于很难直接与嵌入式 Google/Apple 地图进行交互,因此我编写了一些后门方法,旨在获取地图将提供给人类的所有信息。然而,在 iOS 上,我写的方法并没有提供返回值,尽管我的指示相反。

到目前为止,我已经做了各种各样的事情,包括将方法简化为只返回一个虚拟字符串的存根。它仍然拒绝这样做。 Microsoft's documentation 中没有任何地方表示无法在 iOS 上返回值。

[Export("GetUnits:")]
public NSString GetUnits(NSString val) // param unused
{
    return new NSString("TEST"); // returns this value in the app, but it doesn't ever make it to the test harness
}

上述代码应该将“TEST”返回给测试工具,然后在我调用app.Invoke("GetUnits:", "") 后,它会打印在我的REPL 中,这总是会产生

[

]

而不是

[
    "TEST"
]

方法命名正确,调用正确;如果我没有正确调用它(例如错误的参数数量,错误的方法名称)并且插入到方法中的测试代码执行正常,则会出现错误消息,所以我知道它正在执行。它只是没有将值返回到测试工具。此方法的等效 Android 版本完美运行。

我在 Xamarin 论坛上发现一个人遇到了同样的问题,但他的话题已经两年没有被触及了。我已经阅读了我可以在网络上找到的所有相关内容,但均无济于事。

为格式化而编辑。 (哎呀。)

【问题讨论】:

标签: xamarin.forms xamarin.ios xamarin.uitest


【解决方案1】:

这是我们在自己的集成测试中使用的,以确保我们不会破坏此功能:

这一行就是我们调用后门的方式:

_app.Invoke("backdoorWithString:", stringArg).ToString().ShouldEqual(stringArg);

在应用中,我们引用的后门是在原生应用中定义的,因此很难比较:

- (NSString *) backdoorWithString:(NSString *) value {

我建议将您的 Export 更改为正确的大小写:

[Export("getUnits:")]

另外请检查此方法是否在您的AppDelegate.cs 文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2012-02-29
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多