Вопрос:

Как определить глобальную конечную переменную, которая не изменяется для всех тестов в классе?

swift unit-testing

74 просмотра

2 ответа

2042 Репутация автора

Я пишу модульный тест в Swift.

Я вызываю мой метод приложения и через 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данных.

Как мне этого добиться?

(Я знаю, что это не очень хорошая практика для модульного тестирования, но в любом случае)

Спасибо,

Автор: snaggs Источник Размещён: 17.03.2017 12:24

Ответы (2)


-1 плюса

352 Репутация автора

Ну, если вы действительно этого хотите, вы можете просто положить launchRequestза пределы своего LaunchTestsкласса:

var launchRequest:String? = nil

class LaunchTests: XCTestCase, TestServerHandlerDelegate {
  ...
}
Автор: Aleksa Размещён: 17.03.2017 01:18

-1 плюса

2042 Репутация автора

Решение было определить launchRequestкак static(как упоминал Максим Шустин):

static var launchRequest:String? = nil   

В этом случае все работает как положено

Автор: snaggs Размещён: 18.03.2017 04:17
Вопросы из категории :
32x32