XCode7 UITesting - 如何添加从 UITestCase 可用的主要目标类(未定义符号错误)?
Posted
技术标签:
【中文标题】XCode7 UITesting - 如何添加从 UITestCase 可用的主要目标类(未定义符号错误)?【英文标题】:XCode7 UITesting - how to add main target classes to be available from UITestCase (Undefined symbols error)? 【发布时间】:2016-01-13 15:58:37 【问题描述】:我正在使用 XCode7 进行 UI 测试,需要一种方法将我的应用程序重置为某个初始状态。我有一种方法可以在我的一个 .m 文件中执行此操作,该文件是主要目标的一部分。
如何使主要目标中的类在 UITestCase 中可用?
我尝试了常规导入,但出现链接器错误:
#import <XCTest/XCTest.h>
#import "CertificateManager.h"
@interface UITests : XCTestCase
@end
-(void)testWelcomeScreen
//put the app into initial state
[[CertificateManager sharedInstance] resetApplication];
//... proceed with test
错误:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_CertificateManager", referenced from:
objc-class-ref in UITests.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我已将此与单元测试目标进行了比较,但除了单元测试目标已选中“允许测试主机应用程序 API”之外,看不到其他差异,而 UITest 目标根本没有此选项。
【问题讨论】:
【参考方案1】:UI 测试在与您的生产应用不同的进程中运行。这意味着您无法从测试套件访问任何生产类。
除了触摸屏幕之外,UI 测试的唯一交互方式是设置启动参数或修改启动环境。
您可以在应用启动时使用其中任何一种来重置应用。例如,在您的 UI 测试测试中:
@interface UITests : XCTestCase
@property (nonatomic) XCUIApplication *app;
@end
@implementation FooUITests
- (void)setUp
[super setUp];
self.app = [[XCUIApplication alloc] init];
self.app.launchArguments = @[ @"UI-TESTING" ];
[self.app launch];
- (void)testExample
// ... //
@end
然后,当您的应用启动时,您可以检查此参数。如果存在,请调用您应用的“重置”方法。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
if ([[[NSProcessInfo processInfo] arguments] containsObject:@"UI-TESTING"])
[[CertificateManager sharedInstance] resetApplication];
return YES;
【讨论】:
以上是关于XCode7 UITesting - 如何添加从 UITestCase 可用的主要目标类(未定义符号错误)?的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 7 UITesting 用于 OS X 上的菜单栏应用程序
Swift UITesting 错误:文字中的转义序列无效。 \U201c