用于单元测试 Objective-C XCTest 的 .m 文件中的访问变量定义
Posted
技术标签:
【中文标题】用于单元测试 Objective-C XCTest 的 .m 文件中的访问变量定义【英文标题】:Access Variable Defines in .m file for Unit Testing Objective-C XCTest 【发布时间】:2017-06-16 07:27:57 【问题描述】:我正在使用 XCTestKit 在我的应用程序中使用 Objective-C 进行单元测试。 我需要在屏幕上测试文本字段的默认值,但 IBOutlets 是在 .m 文件下声明的。
是否有任何方法可以访问这些变量,或任何其他方法来测试 UnitTest 类中的值。
【问题讨论】:
我真的不明白是什么问题。请显示一些示例代码。 您可以使用 Key Value Observing 访问这些值。 【参考方案1】:假设你的 .m 文件有类似的东西
@interface MyClass ()
@property (nonatomic, strong) IBOutlet UILabel *myLabel;
@end
一种方法是通过复制和粘贴到您的测试文件,在您的测试文件中公开它,但给类别命名:
@interface MyClass (Testing)
@property (nonatomic, strong) IBOutlet UILabel *myLabel;
@end
这种方法的优点是它可以让你的 -public 界面隐藏出口。
缺点是重复意味着如果您更改任何有关属性声明的内容,您必须记住在您的测试文件中重复它。
另一种方法是将您的出口从您的 .m 移动到您的 .h。
这种方法的优点是它承认测试是 API 的有效客户端,并避免重复。 这种方法的缺点是您的 API 中的内容比您希望所有客户端知道的要多。我更喜欢第二种方法。然后我所做的是通过不将类接口视为“每个人的接口”来软化缺点。相反,我将事物拆分为协议,只公开特定客户端单独他们的交互所需的内容。
【讨论】:
感谢 Jon 的回复,但创建另一个文件不利于将来更改原始文件不会影响测试用例 我不是在谈论制作另一个文件。您可以对现有文件采取任何一种方法。 好的,所以添加(测试)会起作用吗?让我看看这个 要明确一点:这就是您可以复制并粘贴您的插座到您的测试文件的方法。 “Testing”这个名字根本不重要,它只需要一个名字。以上是关于用于单元测试 Objective-C XCTest 的 .m 文件中的访问变量定义的主要内容,如果未能解决你的问题,请参考以下文章
将 XCTest 与 Objective-C++ 代码一起使用:“Unexpected @ in program”错误
如何使用 XCTest 测试一个 navigationBar 是不是未在 Objective-C 中设置为特定颜色?