新西兰TDD模拟的奇怪行为

时间:2014-03-18 23:21:06

标签: unit-testing mocking stub kiwi

我正在使用Kiwi来测试一些类,我需要存根一个类方法只是为了返回一个伪文件路径。 我知道我可以解决暴露一些路径属性或创建一个仅用于测试的子类,但我更喜欢只保留一个类和存根一些方法。

这是测试:

it(@"return the full list of POS", ^(){
    NSString *sample_data_path = [[NSBundle bundleForClass:[self class]] pathForResource:@"sample_pos" ofType:@"plist"];
    Class p = [PointOfSale class];
    [p stub:@selector(sampleDataPath) andReturn:sample_data_path];
    NSArray *allPos = [p findAll];
    [[theValue([allPos count]) should] equal:theValue(100)];
});

我很困惑,因为这个测试通过并且失败,一次成功,一次失败。 没有任何“before_each”或其他正在运行的测试...

有人有同样的问题吗?

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的原因。 原始类和存根类中的方法sampleDataPath返回应该位于不同bundle(mainbundle和test bundle)中的文件路径。 但即使是"生产"文件被复制到测试包中,因此我们在同一个包上有两个同名的文件,因此测试结果是不可预测的;)

所以....如果您有这样的问题,请仔细检查您的文件名!