代码如下:
@implementation MyClass
- (void)func
{
//MyOtherClassObject is an object passed in when initialising MyClass
NSArray *signals = @[[RACObserve(MyOtherClassObject, prop) subscribeNext:^{{}]];
}
@end
@implementation MyTest
- (void)testSomething
{
MyOtherClass *mock = mock([MyOtherClass class]);
MyClass *myObject = [[MyClass alloc] initWithOtherObject:mock]
[myObject func]; //this won't work since RACObserve will return nil instead of a valid signal
}
@end那么,有什么方法可以像普通对象一样获得模拟对象RACObserved呢?
发布于 2015-12-19 19:42:31
这是因为OCMockito (和OCMock )破坏了键值观察,也就是说,您将不会从模拟对象中得到任何KVO“回调”。RACObserve在引擎盖下使用KVO。有许多可能的解决办法:
如何对属性进行存根以使KVO工作?使用stubProperty(实例、属性、值)。例如:
stubProperty(mockEmployee, firstName, @"fake-firstname");我还没有使用OCMockito,所以我无法判断这是否真的适用于RAC。
RACObserve返回的信号提取到属性和存根。而不是NSArray *signals = @[[RACObserve(MyOtherClassObject, prop) subscribeNext:^{{}]];
做:
NSArray *signals = MyOtherClassObject.prop
MyOtherClassObject.prop将返回RACObserve(self, prop)的位置。然后,您可以轻松地存根MyOtherClassObject.prop并返回任何信号,例如,用于同步获取单个值的[RACSignal return:]。
https://stackoverflow.com/questions/34347616
复制相似问题