访问变量在 .m 文件中定义以进行单元测试 Objective-C XCTest

Access Variable Defines in .m file for Unit Testing Objective-C XCTest

我正在使用 XCTestKit 在我的应用程序中使用 Objective-C 进行单元测试。 我需要在屏幕上测试文本字段的默认值,但 IBOutlets 是在 .m 文件下声明的。

是否有任何方法可以访问这些变量,或任何其他方法来测试 UnitTest 中的值 类。

假设您的 .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 中的内容会比您希望所有客户知道的更多。

我更喜欢第二种方法。然后我所做的是通过不将 class 接口视为 "interface for everybody" 来缓和劣势。相反,我将事情分解成协议,仅公开特定客户需要的 他们的 单独交互。