当我尝试像
这样的测试时@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问题;)
答案 0 :(得分:1)
单元测试未与静态库链接。
将库添加到测试目标的构建阶段的“Link Binary with Libraries”部分。