使用@testable从XCTest使用“未解析的标识符”和“类型的值没有成员”

时间:2016-05-22 18:46:28

标签: ios xcode swift xctest

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

现在这些是我的两个问题:

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

2。 Xcode找不到我在XCTest类中创建的内部属性(类型为SearchVC)(在DashboardVC中)。我能够找到除了这个新属性之外的任何其他内部属性。

需要考虑的事项:

  1. 我在XCTest类中使用@testable
  2. 只有当XCTest类包含在相应的测试目标中时,这两个类都包含在框架目标中。
  3. 如果我将测试目标中的SearchVC作为解决方法包括在内,我能够克服问题编号1.但问题2仍然存在。 XCode仍无法在其他类中找到该属性。
  4. 这些是类的简化片段。

    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()
    }
    

    然后我一直在尝试编写Test目标的以下测试成员。

    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")
        }
    }
    

    为什么会发生这种情况或如何解决这个问题?

    谢谢

1 个答案:

答案 0 :(得分:0)

我终于能够让它发挥作用了。 原来这是来自Xcode的故障。由于无法解释的原因,我能够从最新版本的代码中提取,即使我遇到了错误,我也可以通过从测试目标中取出每个非测试类来解决这些问题(应该是这样)并且只保留相关课程。我能够访问我的财产并保持目标之间的正确分离。

有没有人经历过同样的故障?