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)]; 

但是我同意詹姆斯的观点,你应该在绝对必要的时候这样做。