Iphone SenTest,Objective-C,古怪类

Iphone SenTest,Objective-C,古怪类,iphone,objective-c,unit-testing,sentestingkit,Iphone,Objective C,Unit Testing,Sentestingkit,我试图编写一个SenTest类,它使用一个类别覆盖控制器类中的一个方法。我希望我的模拟控制器类调用SenTest类中的一个方法,以确定各种测试的行为方式 例如: 在testFoo方法中设置一个var。 在testFoo中,调用我的模拟控制器的重写方法。 让它调用SenTest singleton,以了解testFoo的行为方式。 这是可能的,还是我是个白痴?事实证明,这样做的诀窍是在类别代码中进行相关引用,而不是在SenTest案例中 例如,在类别中声明: -(void)fakeMethodT

我试图编写一个SenTest类,它使用一个类别覆盖控制器类中的一个方法。我希望我的模拟控制器类调用SenTest类中的一个方法,以确定各种测试的行为方式

例如:

在testFoo方法中设置一个var。 在testFoo中,调用我的模拟控制器的重写方法。 让它调用SenTest singleton,以了解testFoo的行为方式。
这是可能的,还是我是个白痴?

事实证明,这样做的诀窍是在类别代码中进行相关引用,而不是在SenTest案例中

例如,在类别中声明:

 -(void)fakeMethodToSetTestData:(NSDictionary *)data;
在该方法中,设置关联引用以存储与self关联的数据

在对象的测试用例中调用它,传递数据

然后在您的测试用例中,调用您的:

-(void)realMethodInCategoryWhichIsBeingOverridden;
在该方法的类别实现中,从第一个方法中设置的关联引用中检索数据


这将允许您在控制器上设置测试数据,以便您可以劫持委派链,例如,防止第二种方法进入网络并将测试数据返回到控制器的代码中。

此处的类别是什么?把控制器变成模拟的?也就是说,覆盖是到测试单例的位吗?类别是覆盖我的控制器中建立网络连接的方法。我希望在单元测试中避免这种情况。我想我可能希望在这里使用关联引用,这可以让我,比方说,在被测试的控制器上设置一个测试参数字典,然后在category override方法中检索它,以获取适当的数据来驱动给定的测试。我今天将尝试这个。听起来你想通过策略模式将网络位移出到一个单独的对象中,或者为你的测试对控制器进行子类化,并使用普通的旧IVAR。