テストケースには、次の4つの異なるフェーズがあります。
- 設定
- エクササイズ
- 確認
- 取り壊す
これらのフェーズの一部は空にすることができます。たとえば、ARCを使用すると、ほとんどの破棄が自動的に行われます。
setUp
開始するときは、またはtearDown
メソッドに何も入れないでください。単一の単体テストを作成するだけです。これが実際の例です。(Objective-Cのイディオムでは「get」という単語を使用しないため、名前を変更します。したがって、getFlag
単に名前を付けるのではなく、名前を変更しますflag
。)クラスを「Example」と呼び、使用します。アーク。そして、私は「テスト対象システム」の略語「sut」を使用します。
- (void)testFlagGivenOneEntry
{
// set up
Example *sut = [[Example alloc] init];
[sut setTags:@{ @"key1" : @"value1" }];
// execute & verify
STAssertEqualObjects([sut flag], @"key1=\"value1\"", nil);
}
それは1つのテストです。もう1つ追加しましょう。
- (void)testFlagGivenTwoEntries
{
// set up
Example *sut = [[Example alloc] init];
[sut setTags:@{ @"key1" : @"value1",
@"key2" : @"value2" }];
// execute & verify
STAssertEqualObjects([sut flag], @"key1=\"value1\"&key2=\"value2\"", nil);
}
この時点で、重複したコードがあります:sutの作成。これで、変数をクラスのインスタンス変数に昇格させることができます。次に、それを作成し、setUp
で破棄しtearDown
ます:
@interface ExampleTest : SenTestCase
@end
@implementation ExampleTest
{
Example *sut;
}
- (void)setUp
{
[super setUp];
sut = [[Example alloc] init];
}
- (void)tearDown
{
sut = nil;
[super tearDown];
}
- (void)testFlagGivenOneEntry
{
[sut setTags:@{ @"key1" : @"value1" }];
STAssertEqualObjects([sut flag], @"key1=\"value1\"", nil);
}
- (void)testFlagGivenTwoEntries
{
[sut setTags:@{ @"key1" : @"value1",
@"key2" : @"value2" }];
STAssertEqualObjects([sut flag], @"key1=\"value1\"&key2=\"value2\"", nil);
}
@end
より複雑な例については、Objective-C TDD:はじめにを参照してください。