ios xcode 11ユニットテスト実践


最近iOSの変異テストをしていますが、一部はカバー率に基づいて単測用例を正確に推薦する必要があります.その中でiosの単測を設計しました.今日はiOSの単測についてお話しします.

1、xcodebuildコマンドの表示

man xcodebuild xcodebuildでサポートされているオプションを表示できます.

2、xcodebuild完全なユニットテストコマンド

xcodebuild test -workspace 'xxx.xcworkspace' -scheme xxx -destination 'platform=iOS simulator,id=82D4328F-F862-4BC5-A3B2-41F044E444AB' -enableCodeCoverage YES    -default-test-execution-time-allowance 0.5 -test-timeouts-enabled YES -maximum-test-execution-time-allowance 0.5  -resultBundlePath 'xxx.xcresult' -only-testing xxx/yyy/zzz
  • -workspace工事名
  • -destinationユニットテストの実行機
  • -only-testingある単測用例
  • を運転する.
  • -skip-testingある単一測定例
  • をスキップする.-only-testingおよび-skip-testing入力フォーマットは、TestTarget[/TestClass[/TestMethod]]であり、-destinationは、コマンドinstruments -s devicesによって取得され、エンジニアリングに適合するデバイスを選択することができる(エンジニアリングはオペレーティングシステムの最低要件を設定する可能性があるため)

    3、xcodebuildのコンパイルと実行


    コンパイルのみ実行しない
    xcodebuild build-for-testing  xxx
    

    実行のみ非コンパイル
    xcodebuild test-without-building 
    

    コンパイル+実行
    xcodebuild test
    

    4、オーバーライド率の表示


    4.1レポートをjson形式で表示

    xcrun xccov view --report --json Demo.xcresult
    

    4.2レポートをデフォルトで表示

     xcrun xccov view --report Demo.xcresult
    

    4.3上書きされたファイルの表示

     xcrun xccov view --archive --file-list Demo.xcresult
    

    4.4ファイル上書きの行番号の表示

    xcrun xccov view --archive --file 'xxx' Demo.xcresult
    

    5、並列実行ユニットテスト


    パラレルテストは、複数のターゲットで同時にテストできます.次の方法で、異なるテストターゲット上で並列にテストできます.
    xcodebuild test
        -destination 'platform=iOS,name=iPhone X'
        -destination 'platform=iOS,name=iPad'
    

    パラレルテストでは、シミュレータを事前に起動したほうがいいです.シミュレータを起動するコマンドは次のとおりです.
    xcrun instruments -w  
    

    6、Xcodebuild実行ユニットテストタイムアウト


    xcode11.4実行ユニットテストのタイムアウトパラメータを追加し、-test-timeouts-enabledオプションを有効にした後、単一のテストのデフォルト実行時間を構成します.-default-test-execution-time-allowanceオプションを渡してください.テストの実行時間に絶対上限を追加するには、executeTimeAllowance APIを介してより多くの時間を要求する場合は、-maximum-test-execution-time-allowanceオプションを渡します.しかし実際の実践では-maximum-test-execution-time-allowanceパラメータは有効ではなく、タイムアウト時間は永遠に1分であることが分かった.

    参考記事


    1、https://developer.apple.com/library/archive/technotes/tn2339/_index.html#//apple_ref/doc/uid/DTS40014588-CH1-PRODUCT 2、https://www.thinbug.com/q/20237064 3、https://www.hualong.me/2018/03/14/Xcodebuild/4、https://www.jianshu.com/p/f88d5efbc98f 5、https://medium.com/xcblog/xccov-xcode-code-coverage-report-for-humans-466a4865aa18 6、https://xiaozhuanlan.com/topic/3790216845 7、https://www.jianshu.com/p/4413d6879457 8、https://ohmyrss.com/post/1585243964646