我正在尝试测试这个类 ( Swiftris/Swifteris/Array2D.swift):
class Array2D<T> {
let rows: Int
let columns: Int
var array: Array<T?>
init(rows: Int, columns: Int) {
self.rows = rows
self.columns = columns
array = Array<T?>(count:rows * columns, repeatedValue: nil)
}
subscript(column: Int, row: Int) -> T? {
get {
return array[(row * columns) + column]
}
set {
array[(row * columns) + column] = newValue
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过这个简单的测试 ( Swiftris/SwiftrisTests/Array2DTest.swift):
import UIKit
import XCTest
class Array2DTest: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
func testHasRows() {
var array: Array2D = Array2D(rows: 10, columns: 15)
XCTAssertEqual(array.rows, 20, "an Array2D instance should have the correct number of rows")
}
}
Run Code Online (Sandbox Code Playgroud)
它莫名其妙地无法解析 Array2D:
Swifteris/SwifterisTests/Array2DTest.swift:12:20: Use of undeclared type 'Array2D'
Run Code Online (Sandbox Code Playgroud)
我需要将自己的模块导入到我的测试中吗?这非常令人费解,因为我在另一个项目中做了完全相同的瘦身,并且在解析被测类时没有遇到任何问题。
您有 2 个选择。
Array2D.swift到SwifterisTests目标会员这很简单

Swifteris到Array2DTest.swift基本上推荐这个方法,但是比较烦人。
首先,您必须将所有可测试的类/方法/属性声明为public:
Array2D.swift:
public class Array2D<T> {
public let rows: Int
public let columns: Int
private var array: Array<T?>
public init(rows: Int, columns: Int) {
self.rows = rows
self.columns = columns
array = Array<T?>(count:rows * columns, repeatedValue: nil)
}
public subscript(column: Int, row: Int) -> T? {
get {
return array[(row * columns) + column]
}
set {
array[(row * columns) + column] = newValue
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,导入主模块Swifteris到测试模块SwifterisTests
import XCTest
import Swifteris
// Here Array2D is avaiable.
Run Code Online (Sandbox Code Playgroud)
关于此问答的更多讨论:Swift、访问修饰符和单元测试
| 归档时间: |
|
| 查看次数: |
1783 次 |
| 最近记录: |