Swift 项目的单元测试类

Posted

技术标签:

【中文标题】Swift 项目的单元测试类【英文标题】:Unit test class for Swift project 【发布时间】:2014-07-24 03:24:49 【问题描述】:

我创建了一个新的单视图 Swift 项目并创建了一个 MyModel

class MyModel 

    func add(a : Int, b : Int) -> Int 
        return a + b
    

但是我在创建测试用例时遇到了问题。错误信息:

/卷/Macintosh 高清/用户/用户/项目/TestCase/TestCaseTests/TestCaseTests.swift:26:19: 使用未解析的标识符“模型”

如您所见,import TextCase(我的目标)并没有解决问题。解决问题的唯一方法是将 MyModel.swift 添加到目标:TestCaseTests。但这与 Objective-C 项目不同(我根本不需要将 .m 文件添加到测试用例目标)。这是错误还是设计?

【问题讨论】:

您是否将文件添加到测试用例中?见...medium.com/swift-programming/… 【参考方案1】:

您应该将您正在测试的 swift 文件添加到测试目标。

这可以通过点击 swift 文件,转到实用程序面板(右侧)并选中“目标成员”下的复选框来完成。

不用把访问修饰符改成public,internal就可以了。


更新

从 XCode 7 开始,不再需要使任何文件成为测试目标的成员。

推荐的方法是使用 @testable import Product Module Name。只需确保使用产品模块的名称,而不是项目的文件夹名称。

【讨论】:

这种方法的缺点是您在该类中使用的所有依赖项也需要添加到测试目标中。肯定有更好的方法吗? 这基本上违背了设置单元测试的目标依赖项的目的。 产品模块名称可以在主要目标的包装部分找到【参考方案2】:

根据this 的回答,您现在可以使用@testable import Module Name(使用Xcode 7)。

【讨论】:

您应该引用完整的答案,特别是因为您没有直接链接到答案,而是问题(让我们阅读/猜测您所指的内容) 这是新的正确答案。但是,现在应该有更多关于可测试性如何工作的信息。【参考方案3】:

从 Beta 4 开始可以使用访问修饰符,并且单元测试类现在被视为在主题模块之外,因此要访问您模块中的任何内容,必须将其声明为 public

public class MyModel 

    public func add(a : Int, b : Int) -> Int 
        return a + b
    


【讨论】:

即使我添加 public 也不起作用。到目前为止,唯一的解决方案是添加到我的测试目标中。 @bagusflyer 您是否将 MyModel() 所在的 ProjectName 导入到您的单元测试类中? 我尝试导入 ProjectName。(截图没有显示这种情况)。它没有帮助。唯一的方法是将 MyModel 添加到我的 TestCase Target。 谢谢!撞墙头疼。 那么在不将 MyModel.swift 添加到测试目标的情况下,有没有更好的解决方案呢?这种方法不适用于模型,因为当模型类添加到测试目标时,模型会选择错误的目标作为命名空间。

以上是关于Swift 项目的单元测试类的主要内容,如果未能解决你的问题,请参考以下文章

Swift、访问修饰符和单元测试

如何让单元测试访问核心数据模型

无法在单元测试项目中的 Swift 中读取 JSON 文件

如何在 Swift 中设置单元测试?

如何从 Swift 单元测试访问测试目标中存在的 Objective-C 代码?

Xcode 单元测试 - 添加一个用于所有测试类的通用函数