Objective-C Language
Xcodeを使用したユニットテスト
サーチ…
備考
依存関係 :
- アプリケーションで第三者のライブラリまたはココアポッドを使用する場合は、それらのライブラリまたはポッドもテスト用にインストールする必要があります。
- テストクラス(テストスーツ)はXCTestCaseを拡張します。
開始前にブラッシュアップ:
すべてのテストクラスには、setUpとtearDownの2つのメソッドがあります。
setUpはすべてのテストケースの前に実行され、&tearDownはすべてのテストケースの後に実行されます。
テストケースはアルファベット順に実行されます。
テスト駆動開発では、最初にダミーのテストデータを作成することをお勧めします。
テストケースメソッドは "test"キーワードで始まります。
テストメソッドはパラメータを受け入れず、値も返しません。
付録:
期待される結果と実際の結果とを操作から比較する方法はいくつかあります。これらのメソッドのいくつかを以下に示します。
- expression!= nilの場合、XCTAssertNil(expression、comment)は失敗を生成します。
- expression = nilの場合、XCTAssertNotNil(expression、comment)は失敗を生成します。
- expression == falseの場合、XCTAssert(expression、comment)は失敗を生成します。
- expression == falseの場合、XCTAssertTrue(expression、comment)は失敗を生成します。
- expression!= falseの場合、XCTAssertFalse(expression、comment)は失敗を生成します。
- expression1がexpression2と等しくない場合、XCTAssertEqualObjects(expression1、expression2、comment)は失敗を生成します。
- expression1がexpression2と等しい場合、XCTAssertEqualObjects(expression1、expression2、comment)は失敗を生成します。
- expression1 == expression2の場合、XCTAssertNotEqual(expression1、expression2、comment)は失敗を生成します。
- expression1!= expression2の場合、XCTAssertEqual(expression1、expression2、comment)は失敗を生成します。
- XCTAssertGreaterThanOrEqual(expression1、expression2、comment)は、(expression1 <expression2)のときにエラーを生成します。
コードのブロックまたはいくつかのメソッドをテストする:
- テストするメソッドを含むクラスをインポートします。
- ダミーデータで操作してください。
- オペレーションの結果と期待される結果を比較してみましょう。
- (void)testReverseString{
NSString *originalString = @"hi_my_name_is_siddharth";
NSString *reversedString = [self.someObject reverseString:originalString];
NSString *expectedReversedString = @"htrahddis_si_eman_ym_ih";
XCTAssertEqualObjects(expectedReversedString, reversedString, @"The reversed string did not match the expected reverse");
}
必要に応じて、テスト中のメソッドにダミーデータを入力し、期待される結果と実際の結果を比較します。
非同期のコードブロックをテストする:
- (void)testDoSomethingThatTakesSomeTime{
XCTestExpectation *completionExpectation = [self expectationWithDescription:@"Long method"];
[self.someObject doSomethingThatTakesSomeTimesWithCompletionBlock:^(NSString *result) {
XCTAssertEqualObjects(@"result", result, @"Result was not correct!");
[completionExpectation fulfill];
}];
[self waitForExpectationsWithTimeout:5.0 handler:nil];
}
- 必要に応じて、ダミーデータをテスト中のメソッドに供給します。
- タイムアウトに達するか、またはすべての期待が満たされるまで、テストはここで一時停止し、実行ループを実行します。
- タイムアウトは、非同期ブロックが応答するのに必要な時間です。
コードブロックのパフォーマンスの測定:
1.同期メソッドの場合:
- (void)testPerformanceReverseString {
NSString *originalString = @"hi_my_name_is_siddharth";
[self measureBlock:^{
[self.someObject reverseString:originalString];
}];
}
2.非同期メソッドの場合:
- (void)testPerformanceOfAsynchronousBlock {
[self measureMetrics:@[XCTPerformanceMetric_WallClockTime] automaticallyStartMeasuring:YES forBlock:^{
XCTestExpectation *expectation = [self expectationWithDescription:@"performanceTestWithResponse"];
[self.someObject doSomethingThatTakesSomeTimesWithCompletionBlock:^(NSString *result) {
[expectation fulfill];
}];
[self waitForExpectationsWithTimeout:5.0 handler:^(NSError *error) {
}];
}];
}
- これらのパフォーマンス測定ブロックは連続して10回実行され、その後平均が計算され、この平均パフォーマンス結果に基づいて作成され、ベースラインはさらに評価するために受け入れられます。
- パフォーマンス結果は、カスタマイズ可能な最大標準偏差を用いて、以前のテスト結果およびベースラインと比較されます。
テストスーツの実行:
[製品]> [テスト]を選択して、すべてのテストを実行します。 Test Navigatorアイコンをクリックして、テストのステータスと結果を表示します。テストナビゲータの左下隅にある[追加(プラス)]ボタンをクリックすると、プロジェクトにテストターゲットを追加(またはテストにクラスを追加)できます。特定のテストのソースコードを表示するには、テストリストから選択します。ファイルがソースコードエディタで開きます。
注意:
新しいプロジェクトを作成するときは、以下のようにユニットテストケースのチェックボックスがオンになっていることを確認してください。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow