代码之家  ›  专栏  ›  技术社区  ›  wcochran

如何将小型Xcode单元测试与未定义的符号链接

  •  0
  • wcochran  · 技术社区  · 8 月前

    试图实现的解决方案 this problem ,我有 Swift source file zShearFactor.swift 定义一个函数 zWarpShearFactor 返回类型为的结构 SVDFactors :

    import Foundation
    import simd
    
    struct SVDFactors {
        let U : simd_float3x3
        let S : simd_float3x3
        let V : simd_float3x3
    }
    
    func zWarpShearFactor(a : Float, b : Float, c : Float) -> SVDFactors {
       ...
    }
    

    努力成为我应该成为的勤奋程序员 I created a XCode unit test

    import XCTest
    import simd
    @testable import zshear_factor
    
    class zshear_factor_test: XCTestCase {
        static func verifySVD(a : Float, b : Float, c : Float, svd : SVDFactors) -> Bool {
            let A = simd_float3x3(rows: [
                simd_float3(1, 0, a),
                simd_float3(0, 1, b),
                simd_float3(0, 0, c)
            ])
            let A_ = svd.U * svd.S * simd_transpose(svd.V)
            return simd_almost_equal_elements(A, A_, 0.0001)
        }
    
        func testzWarpShearFactor() {
            let testValues : [Float] = [0, -1, +1, 10, -10, 1.23, -1.23]
            for a in testValues {
                for b in testValues {
                    for c in testValues {
                        let SVD = zWarpShearFactor(a: a, b: b, c: c)
                        XCTAssertTrue(Self.verifySVD(a: a, b: b, c: c,
                                                     svd: SVD),
                                      "zWarpShearFactor(\(a),\(b),\(c) FAIL")
                    }
                }
            }
        }
    }
    

    尽管我通过导入了 @testable import zshear_factor 很明显 我需要做更多的事情,因为当我点击钻石时,我得到了一个链接器错误 运行Xcode项目:

    enter image description here

    最初的问题是我在构建设置中放了什么,以便正确 代码是否与单元测试相关联?更大的问题是如何做到这一点 在非常大的项目中,当小文件中只有一个小函数时 想测试吗?这个 @testable import 方法似乎包含了所有内容 在包括厨房水槽在内的应用程序中。

    1 回复  |  直到 8 月前
        1
  •  1
  •   Larme    8 月前

    在您的示例GitHub项目中,您有以下错误:

    @testable import zshear_factor //"No such module 'zshear_factor'"
    

    所以把它去掉。

    稍后你会 Cannot find 'zWarpShearFactor' in scope 所以 zWarpShearFactor(a:b:c:) 未知。那是因为 zShearFactor.swift 不在“单元测试应用程序”中,它只在“主应用程序”。

    enter image description here

    因此,通过选中“zshear factor test”框,将其添加到“测试应用程序”中,即可运行。