XCTest iOS Swiftユニットテスト


iOS XCTestセルテスト


XCTest iOS 7の時に接触しましたが、ずっと役に立たなかったです.最初はセルテストは鶏の肋骨だと思いましたが、私たちは単一のクラスの関数をテストするしかなく、自分で所望の結果を判断し、検証する必要があります.依存関係が複雑ならGGです.
成長とは何か、成長とは異なる段階で一つのものを見る異なる見方である.今iOS 11になって、新しくXCTestと新しく出たXCUITestを見て、もうあの年の嫌な顔と屑ではありません.
一言が存在するのは合理的であることを覚えておく.次は私が新しく1日かけてコースを勉強しました(点開はリンク先です):
  • WWDC XCTest
  • WWDC XCUITest
  • GITHUB Demo
  • OCMock
  • [iOSユニットテストシリーズ]ユニットテストフレームワーク選択
  • XCTestを知る


    プロジェクトを新規作成するとき、XcodeはXCUnitTestとXCUITestを新規作成するかどうかを尋ねます.ではXCUnitTestは何をしているのか、どうやって使うのか、何が含まれているのか.
    新規プロジェクトのTests Targetファイルは次のとおりです.
    import XCTest
    @testable import XCTestDemo
    
    class XCTestDemoTests: XCTestCase {
    
        override func setUp() {
            super.setUp()
            // Put setup code here. This method is called before the invocation of each test method in the class.
        }
    
        override func tearDown() {
            // Put teardown code here. This method is called after the invocation of each test method in the class.
            super.tearDown()
        }
    
        func testExample() {
            // This is an example of a functional test case.
            // Use XCTAssert and related functions to verify your tests produce the correct results.
        }
    
        func testPerformanceExample() {
            // This is an example of a performance test case.
            self.measure {
                // Put the code you want to measure the time of here.
            }
        }
    
    }
    

    注釈からこの4つの関数の意味を知ることができます.
    関数#カンスウ#
    用途
    setUp
    XCTestCase関数とテストファイルの実行開始時に実行を継承
    tearDown
    継承とXCTestCaseテスト関数の実行後に実行
    testExample
    テストの例関数
    testPerformanceExample
    パフォーマンステスト

    次のXCTestは簡単な例を使用します。


    見てわかるはず
    
    //
    //  XCTestDemoTests.swift
    //  XCTestDemoTests
    //
    //  Created by Nvr on 2018/7/6.
    //  Copyright © 2018  ZY. All rights reserved.
    //
    
    import XCTest
    @testable import XCTestDemo
    
    class XCTestDemoTests: XCTestCase {
    
        var f1:Float?
        var f2:Float?
    
        override func setUp() {
            super.setUp()
            // Put setup code here. This method is called before the invocation of each test method in the class.
            f1 = 10.0
            f2 = 20.0
        }
    
        override func tearDown() {
            // Put teardown code here. This method is called after the invocation of each test method in the class.
            super.tearDown()
        }
    
        func testExample() {
            // This is an example of a functional test case.
            // Use XCTAssert and related functions to verify your tests produce the correct results.
            XCTAssertTrue(f1! + f2! == 30.0)
        }
    
        //simpale Test
        func testIsPrimenumber()  {
            let oddNumber = 5
            //There are lot XCTAssert function, you can check it
            XCTAssertTrue(isPrimenumber(number: Double(oddNumber)))
        }
    
        func isPrimenumber(number:Double) -> Bool{
            for No in 1...Int(sqrt(number)) {
                if Int(number)/No != 0 {
                    return true
                }
            }
            return false
        }
    
        func testPerformanceExample() {
            // This is an example of a performance test case.
            self.measure {
                // Put the code you want to measure the time of here.
            }
        }
    
    }
    

    例:
    関数#カンスウ#
    説明
    testExample
    グローバル変数f 1+f 2の加算が一定の数に等しいか、等しいか否かを断言する
    testIsPrimenumber
    素数断言が真に戻るかどうかを判断する
    まとめ:上の2つの例を通して、XCUintTestが何をしているのか、どのように使われているのかがわかるはずです.
    アサーション共通API:
    API
    説明
    XCTFail(…)
    どんな試みでもテストに失敗します....は出力のヒント文字です.(後ろはこんな感じ)
    XCTAssertNil(expression, …)
    expressionが空の場合に合格します.そうしないと、テストに失敗します.expressionはidタイプのパラメータを受け入れます.
    XCTAssertNotNil(expression, …)
    expressionが空でない場合は、テストに失敗します.expressionはidタイプのパラメータを受け入れます.
    XCTAssert(expression, …)
    expressionがtrueの場合に合格します.そうしないと、テストに失敗します.expressionはbooleanタイプのパラメータを受け入れます.
    XCTAssertTrue(expression, …)
    expressionがtrueの場合に合格します.そうしないと、テストに失敗します.expressionはbooleanタイプのパラメータを受け入れます.
    XCTAssertFalse(expression, …)
    expressionがfalseの場合に合格します.そうしないとテストに失敗します.expressionはbooleanタイプのパラメータを受け入れます.
    XCTAssertEqualObjects(expression1, expression2, …)
    expression 1とexpression 1アドレスが同じ場合に合格します.そうしないとテストに失敗します.expressionはidタイプのパラメータを受け入れます.
    XCTAssertNotEqualObjects(expression1, expression2, …)
    expression 1とexpression 1アドレスが同じ場合に合格します.そうしないとテストに失敗します.expressionはidタイプのパラメータを受け入れます.
    XCTAssertEqual(expression1, expression2, …)
    expression 1とexpression 1が等しい場合に合格します.そうしないとテストに失敗します.expressionは、基本タイプのパラメータ(数値、構造体など)を受け入れます.
    XCTAssertNotEqual(expression1, expression2, …)
    expression 1とexpression 1が等しくない場合に合格します.そうしないとテストに失敗します.expressionは基本タイプのパラメータを受け入れます.
    XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, …)
    expression 1とexpression 2の間の任意の値がaccuracyより大きい場合、テストに失敗します.expression 1、expression 2、accuracyはいずれも基本タイプです.
    XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, …)
    expression 1とexpression 2の間の値がaccuracy以下の場合、テストに失敗します.expression 1、expression 2、accuracyはいずれも基本タイプです.
    XCTAssertGreaterThan(expression1, expression2, …)
    expression 1<=expression 2の場合、テストに失敗します.expressionが基本タイプ
    XCTAssertGreaterThanOrEqual(expression1, expression2, …)
    expression 1XCTAssertLessThan(expression1, expression2, …)
    expression 1>=expression 2の場合、テストに失敗します.expressionが基本タイプ
    XCTAssertLessThanOrEqual(expression1, expression2, …)
    expression 1>expression 2の場合、テストに失敗しました.expressionが基本タイプ
    XCTAssertThrows(expression, …)
    expressionは異常を投げず、テストに失敗した.expressionは式です
    XCTAssertThrowsSpecific(expression, exception_class, …)
    expressionは指定したクラスの異常を投げず、テストに失敗しました.expressionは式でexception_クラスは指定されたクラスです
    XCTAssertThrowsSpecificNamed(expression, exception_class, exception_name, …)
    expressionは指定クラス、指定名前の異常を投げず、テストに失敗しました.expressionは式exceptionです.classは指定されたクラス、exception_nameは名前を指定します
    XCTAssertNoThrow(expression, …)
    expressionが異常を投げ出した場合、テストに失敗します.expressionは式です
    XCTAssertNoThrowSpecific(expression, exception_class, …)
    expressionは指定したクラスの例外を投げ出し、テストに失敗しました.expressionは式です
    XCTAssertNoThrowSpecificNamed(expression, exception_class, exception_name, …)
    expressionは指定クラス、指定名前の異常を投げ出し、テストに失敗しました.

    非同期テスト


    次の場合は、非同期テストを使用します.
  • 文書
  • を開く
  • 他のスレッドで動作
  • とサービスまたは拡張によるコミュニケーション
  • ネットワークアクティビティ
  • アニメーション
  • UIテストのいくつかの条件
  • ネットワーク要求非同期Case


    UIに関する非同期テストは、次のXCUITestで、ネットワーク要求のCaseが非同期テストのメカニズムを理解していると述べています.
  • pod導入alamofire、Targetはあなたがテストするtests Targetです.
  • 新規希望、alamofireでリクエストを開始.
  • 要求コールバックで空かどうかを断言し、fullfillは期待を満たすかどうかを期待する
  • XCWaiter完了時間
  • を設定
    func testAsynNetworkTest(){
    
            let networkExpection = expectation(description: "networkDownSuccess")
    
            Alamofire.request("http://www.httpbin.org/get?key=Xctest", method: .get, parameters: nil, encoding: JSONEncoding.default).responseJSON { (respons) in
                XCTAssertNotNil(respons)
                networkExpection.fulfill()
            }
    
    
    //        waitForExpectations(timeout: 0.00000001)
    //        wait(for: [networkExpection], timeout: 0.00000001)
    
    
    //XCTWaiter.Result   
    //        public enum Result : Int {
    //
    //
    //            case completed
    //
    //            case timedOut
    //
    //            case incorrectOrder
    //
    //            case invertedFulfillment
    //
    //            case interrupted
    //        }
            let result = XCTWaiter(delegate: self).wait(for: [networkExpection], timeout:  1)
            if result == .timedOut {
                print(" ")
            }
        }

    説明:次の3つの関数は、XCWaiterの待ち時間を設定しますが、詳細は異なります。


    関数#カンスウ#
    waitForExpectations(timeout: 0.00000001)
    wait(for: [networkExpection], timeout: 0.00000001)
    let result = XCTWaiter(delegate: self).wait(for: [networkExpection], timeout: 0.00000001)

    Mock


    ポイントが来て、私はずっと