我在一个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的接口是否应该可用?
答案 0 :(得分:-1)
可能存在的一个问题是:
WeightedSumIn2
的swift文件是否为您的测试包和主包声明了Target Membership
?如果没有,请选择swift文件,然后在右侧菜单中的Target Membership
下,选择您的测试包(它应该是一个复选标记)。