swift 当我只是来回移动文件时,为什么我会得到“No such module 'XCTest'”?

uklbhaso  于 5个月前  发布在  Swift
关注(0)|答案(1)|浏览(90)

好吧,所以我被推荐使用XCTests,但它完全困扰着我。所以我试图初始化它的一个小测试。我已经编辑了我的程序的名称,因为我不确定隐私是如何在网上工作的。

// -----Tests.swift

import XCTest 

final class Tests: XCTestCase { 

    func testCallMoveFunctionForPlayer() throws {
        // Create a Board instance
        let board = Board()
    
        // Create a Mob instance
        let mob = Mob()
    
        // Define the start point
        let startPoint = Coord(row: 0, col: 0)
    
        // Place the Mob at the start point on the Board
        board.pieces[startPoint] = mob
    
        // Define the destination
        let destination = Coord(row: 1, col: 1)
    
        // Call the function to test
        board.callMoveFunctionForPlayer(tapRow: destination.row, tapCol: 
        destination.col, startPoint: startPoint, piece: mob)
    
        // Check if the Mob has moved to the destination
        XCTAssertNil(board.pieces[startPoint])
        XCTAssertNotNil(board.pieces[destination])
        XCTAssertEqual(board.pieces[destination], mob)
    }
}

字符串
但是,我被告知Mob和Board都不在这个范围内,所以我把这个文件移到了我的应用程序文件旁边,但是它仍然不工作,然后我把它移回来,但是现在我有一个不同的问题“没有像'XCTest'这样的模块”,这对我来说毫无意义,我把它移到了它来自的同一个文件中。
我希望有一种简单的方法来自动检查我的游戏中最常见的一些bug,但它不起作用。我试图取消所有的方式回来,但即使在其原始状态,它仍然声称该模块不存在。我没有删除任何文件或其他东西,我只是来回移动它。我没有改变其他任何东西。

a8jjtwal

a8jjtwal1#

XCTest在单独的应用程序目标中运行。这本质上是一个单独的应用程序。您不希望测试代码与主应用程序分离,这样您就可以将其保持独立,并知道它不会意外地(或不利地)影响任何东西。这意味着您需要将主代码公开给测试目标。这可以通过使用@testable导入应用程序来完成
将其添加到测试文件的顶部

import XCTest 

@testable import YourAppName // <--- Add This

final class Tests: XCTestCase { 

    func testCallMoveFunctionForPlayer() throws {
        // Test code

字符串
这会将主应用中的所有代码公开给测试目标,而不会将测试代码公开给主应用。允许您在测试中使用已开发的所有代码。
关于No such module as XCTest错误,听起来像是您更改了测试文件的目标。在编辑器中打开测试文件,然后在右侧的检查器窗格中,在Target Membership下,检查它是否只是测试目标的一部分,而不是主目标的一部分。

相关问题