【问题标题】:Why "Cannot find interface declaration for XCTestCase" in Swift unit test?为什么在 Swift 单元测试中“找不到 XCTestCase 的接口声明”?
【发布时间】: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


【解决方案1】:

可能是这个问题:

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

【讨论】:

    猜你喜欢
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多