如何编写 OCUnit 测试用例

Posted

技术标签:

【中文标题】如何编写 OCUnit 测试用例【英文标题】:How to write OCUnit Test Case 【发布时间】:2013-01-18 06:47:07 【问题描述】:

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


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

【问题讨论】:

【参考方案1】:

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

    设置 运动 验证 拆掉

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

开始时,不要在setUptearDown 方法中添加任何内容。只需编写一个单元测试。这是一个有效的例子。 (我要更改名称,因为 Objective-C 的习惯用法是不使用“get”这个词。所以不要使用getFlag,而是直接称它为flag。)我将调用类 `Example ,我将使用 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。

【讨论】:

以上是关于如何编写 OCUnit 测试用例的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的班级用错误代码 138 使我的 OCUnit 测试用例崩溃?

如何在多个 OCUnit 测试用例之间共享代码?

OCUnit - 测试用例失败时中断?

OCUnit 测试用例未运行

发布通知的 OCUnit 测试用例

Ocunit - 创建单例测试类以在类之间共享代码