unit testing从一个类别的私人方法?
我有一个类包含一个私人帮手方法的NSString
类。 如果我可以在我的unit testing中使用这个方法,这将是方便的。 不过,我很难揭露它。 当我在NSString上创build一个类扩展并在这里声明方法时,这个方法在unit testing中是不可见的。 如果我在一个单独的头文件中创build类扩展,或者作为unit testing.m文件的一部分,则无关紧要。
看起来我在这里错过了一些东西。
任何帮助家伙?
常见的unit testing指导会告诉你不要尝试和testing你的私有方法。 只能通过公共接口进行testing。 私有方法只是一个实现细节 ,当你重构时,它随时都可能改变。 你的公共接口应该是相当稳定的,并将运用你的私有方法。
然而,如果你仍然想testing你的私人类别的方法,下面的作品对我来说…
首先,你的类别:
的UIImage + example.h文件
@interface UIImage (Example) @end
的UIImage + Example.m
@implementation UIImage (Example) + (NSString *)examplePrivateMethod { return @"Testing"; } @end
MyExampleTests.m
#import <XCTest/XCTest.h> #import "UIImage+Example.h" @interface UIImage (Example_Test) + (NSString *)examplePrivateMethod; @end @interface MyExampleTests : XCTestCase @end @implementation MyExampleTests - (void)testExample { XCTAssertEqualObjects(@"Test", [UIImage examplePrivateMethod], @"Test should be test"); } @end
从本质上讲,在你的testing中重新声明你的私人方法在一个新的类别。 但是,如上所述,这只是为了testing目的而暴露私有方法,并将testing与您的实现耦合。
你可以通过简单地使用performSelector:
对对象执行任何方法(private或not) performSelector:
就像这样:
[something performSelector:@selector(somePrivateMethod)];
但是我同意詹姆斯的观点,你应该在绝对必要的时候这样做。