ユニットテストの概要(一)

1732 ワード

ユニットテスト


オブジェクトは一般的に一定の状態を持っています.私たちが書いたすべての方法は、1つ以上の出力を生成するか、1つ以上のオブジェクトの状態を変更するか、または兼ねています.1つのメソッドが出力もオブジェクトの状態も変化もしない場合、このメソッドは必要ありません.ユニットテストは、主に、1つ以上の方法を実行することによって、オブジェクトの状態または出力結果が予想されるものと一致するかどうかを検出するクラスの対外曝露方法である.
ユニットテストでは、次の点に注意してください.
  • は、プライベートメソッドを直接テストすることをできるだけ避け、プライベートメソッドが複雑すぎる場合、コードの再構築を考慮し、プライベートメソッドパッケージの論理を別のオブジェクトに移行し、公有メソッドになるべきである.
  • ユニットテストは特定のオブジェクトに基づいているため、コンストラクション関数をテストすることはできません.コンストラクション関数に複雑な論理が含まれている場合は、再構築してメソッドに移動する必要があります.コンストラクション関数に他のオブジェクトの作成ロジックが含まれている場合、このオブジェクトはコンストラクション関数のパラメータとして渡されます.
  • ユニットテストのオーバーライド率は100%に達する必要はありません.オーバーライド率が高いほど、予想収益が低いため、特に簡単な論理やユニットテストで検証できない論理はテストしなくてもいいです.例えば、注文番号を生成する論理では、ユニットテストで生成された注文番号が唯一であるかどうかを検証できないので、ユニットテストをする必要はありません.

  • ユニットテストの例を設計する方法


    Arrange(準備)->Act(実行)->Assert(断言)
  • 準備フェーズ:テスト対象のオブジェクトを定義し、適切なテストパラメータ
  • を準備する
  • 実行フェーズ:テスト対象の1つまたは複数の方法
  • を実行する.
  • 断言フェーズ:検出方法の出力またはオブジェクトの状態が予想
  • に合致するか否かを判定する.
    たとえば、メソッドの最大公約数を計算するコード:
    // Class: GCDCalculator
    - (NSUInteger)GCDWithNumber1:(NSUInteger)number1 number2:(NSUInteger)number2 {
        NSUInteger remainder = number1 % number2;
        if (remainder == 0) {
            return number2;
        } else {
            return [self GCDWithNumber1:number2 number2:remainder];
        }
    }
    

    準備フェーズでは、GDCalculatorのオブジェクトを作成し、実行フェーズで10と6などの適切なテストパラメータを設計する必要があります.メソッド-[CGCDCalculator GCDWithNumber1: number2:]を呼び出して、断言フェーズで結果を得ました.この結果が予想された2と一致するかどうかを検証します.
    - (void)testGCD {
        // Arrange
        GCDCalculator *cal = [[GCDCaculator alloc] init];
        // Act
        NSUInteger gcd = [cal GCDWithNumber1:10 number2:6];
        // Assert
        XCTAssertEqual(gcd, 2, @"GCD failed");
    }