如何编写OCUnit测试用例

时间:2013-01-18 06:47:07

标签: iphone testing ocunit

我想使用Apple默认的SenTestingKit为以下方法编写单元测试:

- (NSDictionary*)getValueTags {
    return _tags;
}

- (NSString*)getFlag {
    NSString* jo = @"";
    for (NSString* key in _tags) {
        jo = [jo stringByAppendingFormat:@"%@=\"%@\"&", key, [_tags objectForKey:key]];
    }
    if ([jo length] > 0) {
        jo = [jo substringToIndex:[jo length] - 1];
    }
    return jo;
}

我使用默认的SenTesting

    - (void)setUp
    {
        [super setUp];

        // Set-up code here.
    }

    - (void)tearDown
    {
        // Tear-down code here.

        [super tearDown];
    }

-(void)testValueTags{

}

-(void)testGetFlag{

}

我是编写TestCases的新手,我需要一些示例方法的指南来编写测试用例

1 个答案:

答案 0 :(得分:2)

测试用例有四个不同的阶段:

  1. 设置
  2. 锻炼
  3. 验证
  4. 拆掉
  5. 其中一些阶段可能是空的。例如,如果您使用ARC,则大多数拆除会自动发生。

    当你开始时,不要在setUptearDown方法中添加任何内容。只需编写一个单元测试。这是一个有效的例子。 (我要更改名称,因为Objective-C成语不是使用“get”这个词。所以不要使用getFlag而是将其称为flag。)我打算打电话类`示例,我将使用ARC。我使用缩写“sut”作为“被测系统”。

    - (void)testFlagGivenOneEntry
    {
        // set up
        Example *sut = [[Example alloc] init];
        [sut setTags:@{ @"key1" : @"value1" }];
    
        // execute & verify
        STAssertEqualObjects([sut flag], @"key1=\"value1\"", nil);
    }
    

    这是一个测试。我们再添加一个。

    - (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: How to Get Started