如何为此方法启动单元测试? iOS版

时间:2014-03-31 23:27:29

标签: ios objective-c unit-testing

我想在record.m文件中对一个方法进行单元测试。

-(void)displayVoucher:(NSArray *)json
{
for (NSInteger x = 0; x < json.count; x++) {
    if ([[[json objectAtIndex:x] objectForKey:@"VoucherCode"] isEqualToString: [self.delegate getVoucherCode]]) {
        self.voucherlabel.text = [[json objectAtIndex:0] objectForKey:@"VoucherTypeDesc"] ;
         [_voucherlabel sizeToFit];
        voucherDescription = [[json objectAtIndex:0] objectForKey:@"VoucherTypeDesc"];
    }
}
}

我在我的测试文件中声明了record.h,并试图实现这个:

- (void)testExample
{
  NSArray *json = [[NSArray alloc]init];
  [displayVoucher:json]; <——— 
}

现在显然,上面的代码是错误的。但我对objc相当新,并且不确定我是如何在record.m中“调用”displayVoucher的。有人可以指导我如何实现这个测试用例吗?我查看了其他教程,例如one。我认为我已经很好地遵循了它,但代码并没有按照我的意愿行事。

1 个答案:

答案 0 :(得分:1)

完全忽略方法的实际实现,你的单元测试中有一个大的错误。 Objective-C中的每个方法都必须在Class或Class的实例上调用。您没有尝试这两种方法(您只是在方括号[displayVoucher:json];内单独编写方法名称)。

您的方法被定义为由前导破折号( - )表示的实例方法。 (您可以阅读有关here)的更多信息。因此,您必须创建一个类的实例来调用它。我将假设您的班级名为Record。所以你的测试最终看起来像这样:

- (void)testExample
{
    Record *record = [[Record alloc] init];
    NSArray *json = [[NSArray alloc] init];
    [record displayVoucher:json];

    XCTAssertEqualObjects(record.voucherlabel.text, @"expected text");
}

XCTAssertEqualObjects的最后一行显示了您可能希望断言该方法已完成您认为应该执行的操作。如果没有正确更新凭证标签文本,测试将失败。