【问题标题】:Swift UI Testing crashes when accessing enum rawValue访问枚举 rawValue 时 Swift UI 测试崩溃
【发布时间】:2016-07-19 06:29:09
【问题描述】:

Xcode 7.3

打开雷达:rdar://25456632

在我的应用程序中,我有一个字符串枚举,用于定义一些可访问性标识符。例如

enum AccessibilityIds:String {
    case ButtonFoo
}

我已经构建了一些要搜索控件的 UI 测试。所以我做了这样的事情:

XCUIApplication().buttons[AccessibilityIds.ButtonFoo.rawValue]

XCode 认为这很好,并没有说明任何错误就行了。但是,当我编译 UI 测试时,我得到了这个编译器错误:

Undefined symbols for architecture x86_64:
"myApp.AccessibilityIds.rawValue.getter : Swift.String", referenced from:
  (extension in myAppUITests):__ObjC.XCTestCase.fooButton (myApp.AccessibilityIds) -> Swift.Bool in TestCaseExtensions.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

交叉引用 UI 测试目标和单元测试目标(编译良好并使用枚举),我发现 UI 测试没有设置 Test Host。设置它意味着 UI 测试代码现在可以编译,但是测试本身随后失败并出现 SIGKILL 和错误:

testFooButton() encountered an error (Lost connection to test manager service. If you believe this error represents a bug, ...

看来我无法在 UI 测试代码中访问枚举 rawValues。有没有其他人遇到过这个并设法弄清楚?

【问题讨论】:

  • 这可能是一个导入问题 - 需要将所有文件添加到测试目标吗?
  • 我不这么认为。我导入@testable import myApp。我还从单元测试中成功访问了这个枚举,并且发现枚举上定义的任何属性或函数都是不可见的。
  • 有一个已知的涉及单例枚举的崩溃错误,这就是您所拥有的。尝试为您的枚举提供另一个案例(即使您从未将其用于任何事情),看看是否能解决问题。
  • 问题似乎与您的构建设置有关。该错误抱怨 Mac OS X(模拟器)架构缺少代码。您是否更改了任何构建设置?那些与 CPU 架构或 SDK 特别相关的可能值得怀疑。
  • 有什么进展吗?在 Xcode 8.2 上仍然发生在我身上

标签: ios swift enums ui-testing


【解决方案1】:

我仍然在 Xcode 11.2.1 中看到这个

作为一种解决方法,我将枚举的文件私有副本放在了 Tests.swift 文件中。 这对我有用,没有任何问题或警告。

【讨论】:

  • 我也看到这个了。我没有复制粘贴代码,而是将定义枚举的文件设置为不仅在我的应用程序的目标中,而且在我的 UI 测试的目标中都有目标成员资格。
  • 实际上刚刚发现了这个问题,指出 @testable 导入不适用于 UI 测试,并且任何共享代码都应该被纳入一个框架,该框架可以链接到应用程序目标和 UI 测试目标......我觉得我过去已经这样做并且忘记了它! stackoverflow.com/questions/33755019/…
  • 我想我一直都知道我的解决方法有点太代码味了....感谢您的链接!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多