0

当我尝试像这样的测试时

@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问题;)

4

1 回答 1

1

单元测试没有链接到静态库。

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

于 2013-11-28T14:34:31.503 回答