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