访问变量在 .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" 来缓和劣势。相反,我将事情分解成协议,仅公开特定客户需要的 他们的 单独交互。
我正在使用 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" 来缓和劣势。相反,我将事情分解成协议,仅公开特定客户需要的 他们的 单独交互。