- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
OCMockito documentation claims it's possible to mock class objects ,但如果我能弄清楚怎么做,我该死。以下测试因 Expected "Purple"but was ""
失败:
- (void)testClassMethodMocking
{
Class stringClassMock = mockClass([NSString class]);
[given([stringClassMock string]) willReturn:@"Purple"];
assertThat([NSString string], equalTo(@"Purple"));
}
如果回答上面链接的常见问题解答部分“你如何模拟类对象?” 不是否暗示可以对类方法的返回值进行 stub ,是它用于什么?
编辑:
当然上面是一个退化的例子,真正的[NSString string]调用在被测方法内部:
- (NSString *)methodThatCallsAClassMethod
{
return [NSString string];
}
...使上面的断言看起来像:
assertThat([testedObject methodThatCallsAClassMethod], equalTo(@"Purple"));
所以上面的方法完全行不通?那么,我如何在这里实现我想做的事情呢?
最佳答案
您的断言语句直接使用了 NSString。改用模拟:
assertThat([stringClassMock string], equalTo(@"Purple"));
换句话说,mock 并没有调配实际的 NSString。相反,它是它的替代品。
编辑:
在您编辑的示例中,您的“methodThatCallsAClassMethod”依赖于 NSString。如果您想替换它,您要么需要注入(inject)类,要么需要注入(inject)子类和重写方法。
注入(inject):
return [self.stringClass string];
然后您可以将 stringClass
属性设置为模拟。
子类和覆盖方法:
@interface TestingFoo : Foo
@end
@implementation @TestingFoo
- (NSString *)methodThatCallsAClassMethod
{
// return whatever you want
}
@end
关于ios - 如何使用 OCMockito stub 类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19799393/
如何使用 OCMockito 捕获具有原始值的参数? MKTArgumentCaptor 似乎只能捕获对象类型? Xcode 说“不兼容的整数转换指针”。 最佳答案 对于原始论点,您必须跳一些舞。假设
如何获取模拟对象的调用次数? 在测试的某个特定点,我想获取某个方法的当前调用计数,然后继续测试并最终验证该方法是否被再次调用。 这会是这样的: [given([mockA interestingMet
首先我模拟了一个对象。然后我做了一些应该调用对象的特定方法的事情。调用是异步的。 所以我想验证的是:最多5秒后,应该调用mock对象的这个方法。 有什么想法吗? 最佳答案 OCMockito 不支持异
我正在尝试验证模拟对象上的函数是否根本没有使用任何参数调用。 我正在模拟的对象的函数是... - (void)registerUserWithUsername:(NSString*)username
在使用 OCMockito 时,以下效果很好: DSAPIManager *mockAPIManager = mock([DSAPIManager class]); [given([mockAPIMa
我有一个具有只读属性的类。 typedef NS_ENUM(NSInteger, MyObjectStates) { MyObjectStatesUnknown, MyObjectStat
我使用 OCMock 对类 lvl 方法进行 stub ,效果很好。现在我需要使用 OCMockito 实现相同的行为。 在 OCMock 中我有以下内容: _mock = mockClass([My
我在 ClassA 中有这两个方法 -(IBAction)onSubmit; -(void)validateName:(NSString*)name; @实现 - (IBAction)onSubmit
我有一个 View Controller ,它在 viewDidLoad 期间将自己添加为 UIApplicationDidBecomeActiveNotification 的观察者。我想验证是否发生
我正在尝试测试基于 Storyboard的应用程序。该场景是一个导航 Controller ,里面有一个 View Controller 。测试是执行 segue 将 View Controller
这是我的单元测试的伪代码: int invocationCount given(mock).willDo { invocationCount++ return value } doSo
我无法编译这段代码: [verify(mockedContext) deleteObject:item1]; [verify(mockedContext) deleteObject:item2]; [
方法签名: - (void)updateFeaturesButtons:(NSInteger)gameId category:(FeatruesCategory)ca
OCMockito documentation claims it's possible to mock class objects ,但如果我能弄清楚怎么做,我该死。以下测试因 Expected "
对于 iOS tdd 测试/模拟,您会推荐哪个框架?我听说 OcMock 存在时间更长,而且更轻量级。任何人都可以提供一些优缺点的例子或演示每个的一些优点。我只是在寻找一个快速的标准模拟框架,但我想知
对于方法签名 - (void)insertValue:(NSUInteger)value; 我正在尝试查看是否永远不会调用任何值的 insertValue。 [verifyCount(test, ne
我想用以下消息声明模拟一个对象: - (void)createWithCompletion:(void (^)(FuseResult *result, NSError *err)) 完成; 是否可以模
我有一个类 QuestionBuilder 的 OCMockito 模拟,方法是 questionsFromJSON:error:。此方法接受句柄 (NSError **)error 作为参数。如何验
我正在尝试使用 OCMockito 来 stub NSJSONSerialization 方法。我以为我有一个解决方案,但事实证明它会导致此异常: *** -[__NSArrayM objectAtI
我在 Xcode 5 上使用 Cocoapods 设置 OCMockito(和 OCHamcrest)时遇到问题。这是我的 Podfile: platform :ios, '5.0' pod 'Res
我是一名优秀的程序员,十分优秀!