无法从我的项目中分配任何东西 - 静态库(使用XCTests)

时间:2013-11-28 14:26:51

标签: ios iphone objective-c unit-testing xctest

当我尝试像

这样的测试时
@interface My_Tests : XCTestCase
- (void)testExample {
     XCTAssertTrue(@YES, @"has to be passed");
}

一切都很好。但是,当我尝试这样的模式时:

 #import "NSString+Additions.h"
 //...
 - (void)testNameValidation {
      NSString *string = @"Harry";
      XCTAssertTrue([string stringIsValid], @"Name validation error");
 }

我明白了:

file:///Users/username/project/ProjectTests/ProjectTest.m: test failure: 
-[Project_test testNameValidation] failed: (([string stringIsValid]) is true) 
failed: throwing "-[__NSCFConstantString stringIsValid]: unrecognized selector
sent to instance 0x2f58ae8" - Name validation error

我也可以这样做:

#import "MyViewController.h"
//...
- (void)testSomething {
    MyViewController *a = [[MyViewController alloc] init];
    XCTAssertTrue(@YES, @"Impossible!");
}

我得到2个错误(第一行和最后一行):

Undefined symbols for architecture i386:
"_OBJC_CLASS_$_MyViewController", referenced from:
objc-class-ref in MyTest.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

有人可以解释一下我做错了什么..?我的班级不能做任何事情。可能值得补充的是,我正在尝试测试我的自定义静态库及其中包含的文件。我正在使用CocoaPods并且我已经基于Kiwi描述设置了环境(只是为了能够在我的测试中使用CocoaPods文件,我还想知道是否使用Kiwi或XCTests。)

PS。这是我第一次尝试任何类型的单元测试,所以请原谅最终的noobish问题;)

1 个答案:

答案 0 :(得分:1)

单元测试未与静态库链接。

将库添加到测试目标的构建阶段的“Link Binary with Libraries”部分。