Ios &引用;未解析标识符的使用“;及;类型的值没有成员“;使用@testable从XCTest开始

Ios &引用;未解析标识符的使用“;及;类型的值没有成员“;使用@testable从XCTest开始,ios,xcode,swift,xctest,Ios,Xcode,Swift,Xctest,让我解释一下上下文。 我们的项目有1个框架目标和1个使用该框架的测试应用程序目标。所有逻辑和代码都进入框架,测试应用程序只导入框架。测试应用程序中不包含任何逻辑 下面是我的两个问题: 1。Xcode无法从我的XCTest类中找到我在框架目标中声明的类(SearchVC)。当我尝试从该类创建实例时,我得到了“使用未解析标识符”。但是,当从框架目标中的其他类生成实例时,我没有问题。事实上,我在另一个类(DashboardVC)中创建了一个属性(类型为SearchVC),我可以正确地访问和初始化它,这

让我解释一下上下文。 我们的项目有1个框架目标1个使用该框架的测试应用程序目标。所有逻辑和代码都进入框架,测试应用程序只导入框架。测试应用程序中不包含任何逻辑

下面是我的两个问题:

1。Xcode无法从我的XCTest类中找到我在框架目标中声明的类(SearchVC)。当我尝试从该类创建实例时,我得到了“使用未解析标识符”。但是,当从框架目标中的其他类生成实例时,我没有问题。事实上,我在另一个类(DashboardVC)中创建了一个属性(类型为SearchVC),我可以正确地访问和初始化它,这就引出了下一个问题

2。Xcode找不到我从XTest类(在DashboardVC中)创建的内部属性(类型为SearchVC)。我可以找到除此新属性之外的任何其他内部属性

需要考虑的事项:

  • 我正在使用XCTest类中的@testable
  • 这两个类仅包含在框架目标中,而XCTest类包含在相应的测试目标中
  • 如果我在测试目标中加入SearchVC作为一种解决方法,我就能克服问题1。但是,问题2依然存在。XCode仍然无法在另一个类中找到该属性
  • 这些是类的简化片段

    class DashboardVC : UIViewController, UITableViewDelegate, UITableViewDataSource {
    
        ... many other properties ...
    
        var searchVC: SearchVC!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            searchVC = SearchVC()
        }
    }
    
    现在是第二节课

    class SearchVC: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    }
    
    然后我一直在尝试编写测试目标的以下测试成员

    import XCTest
    @testable import Invest
    
    class SearchVC: XCTestCase {
    
        ... setup and tearDown methods not included for clarity ...
    
        func testSearchVC_isAddedToDashboard() {
    
            let dashboard = DashboardVC()
            _ = dashboard.view
            XCTAssertNotNil(dashboard.searchVC.view, "View should not be nil")
        }
    }
    
    你知道为什么会发生这种情况,或者如何解决它吗


    谢谢你

    我终于成功了。 这原来是Xcode的一个小故障。出于无法解释的原因,我能够从最新版本的代码中提取代码,即使我遇到了错误,我也能够通过从测试目标中取出每个非测试类(应该是这样的)并只保留相关类来解决这些问题。我能够访问我的财产并在目标之间保持正确的间隔


    有人遇到过同样的问题吗?

    非常感谢@kriztho发布您的解决方案。我面临着一个类似的问题,花了很多时间尝试我遇到的每一个可能的解决方案,直到我找到了你的。结果是,我正在工作的项目在测试目标中有一些Swift源文件。