XCTestCase - 如何在包含字符串的 NSTextView 上断言?

Posted

技术标签:

【中文标题】XCTestCase - 如何在包含字符串的 NSTextView 上断言?【英文标题】:XCTestCase - how to assert on a NSTextView containing String? 【发布时间】:2018-06-01 00:58:15 【问题描述】:

我有一个 macOS 项目,我正在为其创建 UI 测试。

虽然通过文本值查找staticTextbuttons 等相对容易。在.textViews 上使用下标查找(似乎)不起作用。

我设法获得了对 NSTextView 的引用,我想使用 .textViews.firstMatch 进行检查,但我不知道如何断言它的字符串值。

我正在寻找像这样工作的东西。

XCTAssertEqual(prefs.textViews.firstMatch.stringValue, "Enter text below")

【问题讨论】:

textView.value as! String 为我工作。 【参考方案1】:

只需value 即可。 它在XCUIElementAttributes 上可用,类型为Any?,根据元素的类型而有所不同。

XCTAssertEqual(prefs.textViews.firstMatch.value as! String, 
               "Enter text below")

参考:

https://developer.apple.com/documentation/xctest/xcuielementattributes

【讨论】:

非常接近,但是Any? 不会与as? String 一起转换。需要强制施放。我已经用修改后的演员表编辑了你的答案。谢谢你,虽然我已经接受了你的回答,因为它几乎正是我所需要的。 @ocodo 很高兴能帮上忙 :) 还有...感谢您更新答案。【参考方案2】:

如果你打印出元素的debugDescription,你应该看到哪个参数包含你想要断言相等的值。很可能它将是.value,您可以简单地将其强制转换为字符串以用于您的目的。字符串遵守== 相等检查,因此只需一个简单的XCTAssert(originalTextViewValue == "String I want to value check against") 就可以轻松比较两个字符串

【讨论】:

实际上与所选答案相同。谢谢你。但是,@staticVoidMan 更加简洁和具体,并提供了格式清晰的代码示例。

以上是关于XCTestCase - 如何在包含字符串的 NSTextView 上断言?的主要内容,如果未能解决你的问题,请参考以下文章

如何在静态 objc 库中使用 XCTestcase

如何在 XCTestCase 中禁用“所有异常”

如何在 XCTestCase 中测试 NSPersistentDocument?

如何在 XCTestCase 的 setUp() 中设置条件?

如何在 Xcode 7.2 XCTestCase 中获取滚动视图的标签?

如何使用 XCTestCase 测试异步代码