0

OCUnitを使用して単体テストを作成する場合、パブリックインターフェイス(.h)でテストメソッドの定義を省略できます。しかし、パブリックインターフェイスでのテストメソッド定義に関するOCUnitのベストプラクティスは何ですか?

ModelTest.h(テストメソッドは定義されていません)

@interface ModelTest : SenTestCase

@end

ModelTest.m

@implementation ModelTest : SenTestCase
    - (void) testCreation {
        ...
    }
@end

ModelTest.h(テストメソッド定義付き)

@interface ModelTest : SenTestCase
    - (void) testCreation;
@end

個人的には、パブリックテストメソッドの定義をパブリックインターフェイスに反映させる方が良いと思います。しかし、ベストプラクティスは何ですか?パブリックインターフェイスでこれらのメソッドを宣言することを避けられない場合はありますか?

4

2 に答える 2

2

非テストクラスがテストクラスに依存することはめったにありません。ModelTest宣言を#includeする人は誰もいません。したがって、カプセル化やテストメソッドの公開から得られるものは多くありません。テストランナーは、どのような場合でもそれらを見ることができます。

ヘッダーからドキュメントを生成する場合は、.hファイルでそれらを宣言すると便利な場合があります。

場合によっては、テスト用の特別な補助メソッドを追加するSenTestCaseのサブクラスを定義することがあります。その場合、スーパークラスでテストメソッドを公開したくない場合があります。ただし、スーパークラスを補助メソッドを保持するだけの抽象インターフェイスとして扱い、テストケースをスーパークラスから完全に削除する方がよい場合があります。

于 2013-03-25T21:09:16.337 に答える
1

OCUnitテストに別々の.hと.mを使用しません。すべてが.mに入ります

インターフェイスに何かを配置する唯一の理由は、別のクラスがそれを検出できるようにするためです。ただし、テストは、テストケースの特定の名前を参照するコードではなく、リフレクションによって検出されます。

私が使用するテンプレートとその理由については、https://qualitycoding.org/unit-test-template/を参照してください。

于 2013-03-25T21:56:17.913 に答える