为什么"找不到XCTestCase的接口声明"在Swift单元测试?

时间:2015-04-25 10:42:01

标签: unit-testing swift xctest

我在一个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的接口是否应该可用?

1 个答案:

答案 0 :(得分:-1)

可能存在的一个问题是:

WeightedSumIn2的swift文件是否为您的测试包和主包声明了Target Membership?如果没有,请选择swift文件,然后在右侧菜单中的Target Membership下,选择您的测试包(它应该是一个复选标记)。