【发布时间】:2015-07-04 00:57:30
【问题描述】:
我向一个 ObjC 项目添加了一个 Swift 类,并想为它编写一些单元测试。但是当我去构建时,XCode 抱怨它找不到 XCTestCase 的接口声明,即使 XCTest 的 @import 就在上面。我做错了什么?
这里是生成的 -FooTests-Swift.h 文件的相关部分,带有注释:
#if defined(__has_feature) && __has_feature(modules)
@import ObjectiveC;
@import XCTest; <<<< Note the import
#endif
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
SWIFT_CLASS("_TtC12play611Tests14WeightedSumIn2")
@interface WeightedSumIn2 : NSObject <<<< Error here: Cannot find
<<<< interface declaration for 'XCTestCase'
- (SWIFT_NULLABILITY(nonnull) instancetype)initWithInitValue:(double)initValue OBJC_DESIGNATED_INITIALIZER;
- (double)push:(double)e;
@end
@class NSInvocation;
SWIFT_CLASS("_TtC12play611Tests18WeightedSumIn2Test")
@interface WeightedSumIn2Test : XCTestCase
- (void)test1;
- (SWIFT_NULLABILITY(null_unspecified) instancetype)initWithInvocation:(NSInvocation * __null_unspecified)invocation OBJC_DESIGNATED_INITIALIZER;
- (SWIFT_NULLABILITY(null_unspecified) instancetype)initWithSelector:(SEL __null_unspecified)selector OBJC_DESIGNATED_INITIALIZER;
- (SWIFT_NULLABILITY(nonnull) instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
这里是测试用例的来源:
import UIKit
import XCTest
class WeightedSumIn2Test : XCTestCase {
func test1() {...}
}
对于班级:
import UIKit
public class WeightedSumIn2 : NSObject {
init(initValue: Double = 0.0) {...}
func push(e: Double) -> Double {...}
}
这两个文件都已添加到测试目标中。此外,我可以构建/运行 ObjC 单元测试,而不是这个 Swift 测试。
知道有什么问题吗?如果 XCTest 的导入实际上已经完成(我怎么知道 #if 条件是否为真?),XCTestCase 的接口不应该可用吗?
【问题讨论】:
-
您是否将测试文件添加到目标?有趣的元素in this post.
-
好问题,但是是的,测试文件已添加到测试目标中。
-
你找到答案了吗?
-
嗯。我忘了我在这里问过,现在我不记得我是如何解决这个问题的。也许我应该删除这个问题...
标签: unit-testing swift xctest