0

我想使用 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{

}

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

4

1 回答 1

2

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

  1. 设置
  2. 锻炼
  3. 核实
  4. 拆除

其中一些阶段可能是空的。例如,如果您使用 ARC,大多数拆卸会自动发生。

开始时,不要在setUportearDown方法中添加任何内容。只需编写一个单元测试。这是一个有效的例子。(我要更改名称,因为 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);
}

那是一个测试。让我们添加另一个。

- (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:如何开始

于 2013-01-19T07:47:10.597 回答