使用OCMockito测试类别类方法

时间:2014-07-07 00:07:18

标签: objective-c unit-testing mocking ocmockito

我有一个具有类方法的UIColor类别

+(UIColor *)appropriateTextColorForBackground:(UIColor *)background
{
    //...get brightness value 
    if (brightness > 127.5f)
        return [UIColor blackColor];
    else
        return [UIColor whiteColor];
}

我想在我的测试类中使用OCMockito进行测试

-(void)testAppropriateColorWithBlackShouldReturnWhiteColor
{
    Class color = mockClass([UIColor class]);
    [color appropriateTextColorForBackground:black];
    assertThat([color testColorWithColor:black], is([UIColor whiteColor]));
}

但我收到了错误

test failure: -: *** -[NSProxy doesNotRecognizeSelector:appropriateTextColorForBackground:] called!
我错过了什么?似乎这应该有用

1 个答案:

答案 0 :(得分:1)

我同意Bryan的说法,因为你想测试类别方法的实现,所以你不需要在这里模拟。例如:

-(void)testAppropriateColorWithBlackShouldReturnWhiteColor
{
    UIColor *appropriateColor = [color appropriateTextColorForBackground:black];
    assertThat(appropriateColor, is(equalTo([UIColor whiteColor])));
}

你也可能想要对相反的颜色进行类似的测试。我可能会更进一步,将使用变化边界上的颜色进行亮度计算(而不是黑色和白色)。然而,某人(不是我)可能会认为这会暴露实施细节,这通常是在编写单元测试时要避免的事情。