web-dev-qa-db-ja.com

iOSテスト:テストをスキップする方法はありますか?

機能が現在無効になっている場合、特定のテストを実行したくありません。テストを「スキップ」する方法(およびコンソールで適切なフィードバックを取得する方法)はありますか?

このようなもの:

func testSomething() {
  if !isEnabled(feature: Feature) {
    skip("Test skipped, feature \(feature.name) is currently disabled.")
  }

  // actual test code with assertions here, but not run if skip above called.
}
19
scrrr

左側のエディタートレイにあるテストシンボルを右クリックすると、Xcodeによって実行されるXCTestを無効にできます。

enter image description here

このメニューが表示され、「無効にする」オプションを選択できます。

enter image description here

もう一度右クリックすると、再度有効にすることができます。また、ユーザー@sethfの回答で述べたように、現在無効になっているテストのエントリが.xcschemeファイルに表示されます。

最後に、テストを無効にしてxcschemeで無効にするコードをコミットしないことをお勧めします。テストは失敗することを意図しており、不便であるために沈黙することはありません。

32
Sandy Chapman

私がいくつかの記事で見つけた別の可能な解決策:スキップしたテストの前に「skipped_」のようなものを付けます

利点:

  • XCodeはそれらをテストとして扱いません
  • 検索を使用して簡単に見つけることができます
  • 「skipped_」を「」に置き換えて、もう一度テストすることができます
11
Alexander Doloz

これを行う方法は、UIテストの.xcschemeファイルを変更し、TestableReferenceの下にSkippedTestsというセクションを追加してから、「Identifier」属性を持つ個々のテストタグをクラスとテストメソッドの名前で追加することで見つけました。何かのようなもの:

<SkippedTests>
       <Test Identifier="ClassName/testMethodName" />
</SkippedTests>

お役に立てれば

4
sethf

テストケースのスキップはありません。 if-else block:nestedを使用して、目的の出力を実行/印刷できます。

1
Vicky

残念ながら、組み込みのテストケースのスキップはありません。テストケースは成功または失敗します。

つまり、その機能を自分で追加する必要があります。XCTestCaseに関数を追加できます(例:XCTestCase.skip)情報をコンソールに出力するカテゴリを介して。ただし、他のアサートが実行されないようにするには、その後にreturnを配置する必要があります。

1
Sulthan

これは、テストスキームの目的です。さまざまなテスト状況やニーズを対象とするさまざまなスキームを使用できます。たとえば、すべてのテストを実行するスキーム(完全回帰スキーム)を作成したり、小さな変更が加えられたときにアプリでクイックスモークテストを実行するためにそれらの一部を選択したりできます。このように、必要なテストの量に応じて、さまざまなスキームを選択できます。に行くだけ

Product >> Scheme

1
Citronex

xcode 8で可能になりました。別の質問で私の投稿を確認してください:

コマンドラインからのiOSアプリの個々のXCTest(UI、ユニット)テストケースの実行

1
emoleumassi

これはそれほど一般的ではありませんが、XCTestCaseでinvokeTestをオーバーライドして、必要に応じてsuperを呼び出さないようにすることができます。コンソールでの適切なフィードバックについてはわかりません。

たとえば、次のフラグメントは、iPhone 7 Plus/iPad Pro 9.7 "/ iOS 11.4を搭載したiOSシミュレータでのみテストを実行します。

class XXXTests : XCTestCase {

    let supportedModelsAndRuntimeVersions: [(String, String)] = [
        ("iPhone9,2", "11.4"),
        ("iPad6,4", "11.4")
    ]

    override func invokeTest() {
        let environment = ProcessInfo().environment
        guard let model = environment["SIMULATOR_MODEL_IDENTIFIER"], let version = environment["SIMULATOR_RUNTIME_VERSION"] else {
            return
        }
        guard supportedModelsAndRuntimeVersions.contains(where: { $0 == (model, version) }) else {
            return
        }
        super.invokeTest()
    }
0
Grigory Entin

組み込みのテストケースをスキップしない場合、_cmd-/のような検索可能なパターンを使用したComment Selection:TEST:SKIP: reasonコマンドは、シンプルで便利です。意味のあるメッセージをコンソールに出力します。

func testSomeFeature() {
    print(":TEST:SKIP: testSomeFeature disabled pending ...") 
//    ... skipped selection ..
}

後で、someFeatureを更新すると同時にsomeFeatureTestのコメントを外します。

:SKIP:などの検索パターンを使用すると、スキップされたすべての機能とテストをソースコードとコンソール出力で見つけることができます。

注:cmd-/ '//'スタイルのコメントは、Re-Indentコマンドの後のコードインデントを維持します。/*... * /スタイルのコメントは、コードインデントが保存されます。

0
l --marc l