我曾经遇到过很多核心逻辑都在私有方法中的情况。你如何进行单元测试呢?是否有一种编译时操作可以忽略未知/私有方法的编译错误?我知道对于代码的第二部分,我可以使用performSelector,但这是一个合理的解决方案吗?
例如:
[[self.objectMock expect] privateMethod];
or
[self.object callPrivateMethodsToExpectSomeOtherBehaviour]
编辑:
以下是一个示例,演示了为什么我感觉需要测试一些私有方法。这些测试是否合理?否则我该如何测试调用clear是否确实执行了它应该执行的操作?
- (void)clear
{
self.orderNumber = nil;
[self.items removeAllObjects];
// Clear the rest of fields
}
- (void)testClearShouldRemoveOrderNumber
{
Order *order = [[Order alloc] init];
OCMockObject *orderPartialMock = [OCmockObject partialMockForObject:order];
[[orderPartialMock.items expect] setOrderNumber:nil];
[orderPartialMock clear];
[orderPartialMock verify];
}
- (void)testClearShouldRemoveItems
{
Order *order = [[Order alloc] init];
order.items = [[OCMockObject niceMockForClass:[NSMutableArray class]];
[[orderPartialMock.items expect] removeAllObjects];
[orderPartialMock performSelector@selector(clear)];
[orderPartialMock.items verify];
}
@interface
在.m
文件中的类? - Ky -