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

Posted

技术标签:

【中文标题】如何在 Swift 中设置单元测试?【英文标题】:How do I set up unit tests in Swift? 【发布时间】:2014-06-18 12:04:05 【问题描述】:

我在将单元测试添加到我的 Swift 项目时遇到问题,因此我创建了一个新的 Xcode 测试项目,其中包含我的类的精简版本:

class SimpleClass 
    let x: String

    init(x: String) 
        self.x = x
    

    convenience init(dict: Dictionary<String, String>) 
        self.init(x: dict["x"]!)
    

然后我创建了一个简单的测试用例:

import XCTest
import TestProblem

class TestProblemTests: XCTestCase 
    func testExample() 
        // This is an example of a functional test case.
        XCTAssertEqual(SimpleClass(x: "foo"), SimpleClass(dict: ["x": "foo"]))
    


我必须导入项目本身 (import TestProblem) 以修复 SimpleClass 的未解决标识符错误。

但是,当我尝试运行测试时,出现以下编译器错误:

Could not find an overload for 'init' that accepts the supplied arguments

我在这里缺少什么?对 init 的调用在 XCTAssertEqual 调用之外可以正常工作,即使在测试文件中也是如此。

凭直觉,我也试过了:

    let x = SimpleClass(x: "foo")
    let y = SimpleClass(dict: ["x": "foo"])
    XCTAssertEqual(x, y)

当我这样做时,我得到了这个错误:

Cannot convert the expression's type 'Void' to type 'SimpleClass'

【问题讨论】:

【参考方案1】:

您是否尝试明确定义您的参数?像这样:

let x : SimpleClass = SimpleClass(x: "foo")
let y : SimpleClass = SimpleClass(dict: ["x": "foo"])
XCTAssertEqual(x, y)

【讨论】:

嗯,解决了这个问题。我想知道为什么需要显式注释。 你是对的,通常它必须在没有明确注释的情况下工作。这对我来说看起来像一个错误,所以你可以将它报告给苹果。 Xcode 是 beta2,所以还不完美。 感谢您的快速回答 - 我会报告这个问题。

以上是关于如何在 Swift 中设置单元测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Vuejs单元测试中设置或测试。$ parent?

在Laravel 4单元测试中,如何在请求中设置cookie?

如何在 Xcode 4.5“命令行工具”项目中设置工作逻辑单元测试目标?

在 laravel 8 中设置单元测试环境

在单元测试中设置 HttpContext.Current.Session

在角度形式指令的单元测试中设置视图值输入字段