Swift 如何为类下的所有测试定义不更改的全局最终变量?

Swift 如何为类下的所有测试定义不更改的全局最终变量?,swift,unit-testing,Swift,Unit Testing,我用Swift编写单元测试 我调用我的app方法,并通过delegate获取表示请求的JSON对象 现在我想验证JSON的所有字段。每次验证应在单独的测试中进行 这是我写的: class LaunchTests: XCTestCase, TestServerHandlerDelegate { var theExpectation:XCTestExpectation? var launchRequest:String? = nil public func onS

我用Swift编写单元测试

我调用我的app方法,并通过
delegate
获取表示请求的JSON对象

现在我想验证JSON的所有字段。每次验证应在单独的测试中进行

这是我写的:

class LaunchTests: XCTestCase, TestServerHandlerDelegate {

    var theExpectation:XCTestExpectation?

    var launchRequest:String? = nil   

    public func onSend(_ data: Data!) {        
        launchRequest = NSString(data: data, encoding: String.Encoding.utf8.rawValue)         
        theExpectation?.fulfill()
    }

override func setUp() {
        super.setUp()

        // we wait in setUp till get 'launchRequest'
        if launchRequest == nil {

            theExpectation = expectation(description: "initialized") 

             MyApp.shared().setDelegate(self)            
             MyApp.shared().launch()

            // Loop until the expectation is fulfilled in onDone method
            waitForExpectations(timeout: 500, handler: { error in XCTAssertNil(error, "Oh, we got timeout")})
        }
    }

override func tearDown() {
    super.tearDown()
}

func test___01_platform(){
    if let _ = fetchJsonValue(key: "somekey", value: launchRequest){
        //...
    }
}

func test___02_platform(){
    if let _ = fetchJsonValue(key: "platform", value: launchRequest){
        //...
    }
}
问题是:对于每次运行
launchRequest
都是
nil
。我知道这是正确的行为,但我只想调用
MyApp.shared().launch()
一次,并对
launchRequest
数据运行多个测试

我怎样才能做到呢

(我知道这不是单元测试的好做法,但无论如何)


谢谢,

如果你真的想要,你可以把
launchRequest
放在你的
LaunchTests
课程之外:

var launchRequest:String? = nil

class LaunchTests: XCTestCase, TestServerHandlerDelegate {
  ...
}

好吧,如果你真的想要,你可以把
launchRequest
放在你的
LaunchTests
类之外:

var launchRequest:String? = nil

class LaunchTests: XCTestCase, TestServerHandlerDelegate {
  ...
}

解决方案是将
launchRequest
定义为
static
(如Maxim Shoustin所述):


在这种情况下,一切都按预期工作

解决方案是将
启动请求
定义为
静态
(如Maxim Shoustin所述):


在这种情况下,一切正常

您是否尝试设置
静态启动请求
?是否使用
设置
方法向(web)服务器发送请求?你到底想在
test_uuuu01_platform
中测试什么?@MichałCiuba通常我调用我的App
launch
方法发送HTTP请求。我不模拟服务器处理程序(尝试swizzing和OCMock-不起作用),所以我只需注册回调并以JSON stringOK的形式返回请求,您仍然可以自己编写模拟服务器类,因此您的测试不依赖于“真正的”HTTP请求。我建议您在测试中尝试不同的方法,但我仍然不知道您在
test\uuuuuuu02\u platform
方法中尝试测试的确切行为。@MichałCiuba在所有测试中,我都会收到JSON请求,用快速JSON和验证字段解析它。您是否尝试设置
静态启动请求
?是否向(web)发送请求在
设置中的服务器
方法?你到底想在
test_uuuu01_platform
中测试什么?@MichałCiuba通常我调用我的App
launch
方法发送HTTP请求。我不模拟服务器处理程序(尝试swizzing和OCMock-不起作用),所以我只需注册回调并以JSON stringOK的形式返回请求,您仍然可以自己编写模拟服务器类,因此您的测试不依赖于“真正的”HTTP请求。我建议您在测试中尝试一种不同的方法,但我仍然不知道您在
test_uuuuu02_platform
方法中尝试测试的确切行为。@MichałCiuba在所有测试中,我都会收到JSON请求,用SwiftyJSON解析它并验证字段。