6
A
回答
12
Class mocks
創建是一個類實例的純嘲笑的對象。
Partial mocks
以實例的類允許您存根其任何方法。
假設我有這些類:
@interface Foo : NSObject
- (void)doX;
@end
@implementation
- (void)doX
{
NSLog(@"X");
}
@end
@interface Bar : NSObject
- (void)doA:(Foo *)foo;
- (void)doB;
@end
@implementation Bar
- (void)doA:(Foo *)foo
{
NSLog(@"A");
[foo doX];
[self doB];
}
- (void)doB
{
NSLog(@"B");
}
@end
我感興趣的測試條的doA:
方法。我期望它在Foo
對象上調用doX
,然後調用它自己的doB
方法。我會使用Foo的類模擬和Bar的部分模擬來實現這一點。
- (void)test_doA_shouldCall_doX_and_doB
{
id objectUnderTest = [OCMockObject partialMockForObject:[Bar new]];
id fooMock = [OCMockObject mockForClass:Foo.class];
[[fooMock expect] doX];
[[objectUnderTest expect] doB];
// Make the call
[objectUnderTest doA:fooMock];
[objectUnderTest verify];
[fooMock verify];
}
你在這裏看到的是我的部分模擬讓我打電話給我想測試而嘲諷的內部調用它的另一個實例方法的真正方法。因爲我不需要Foo的任何實際功能,但是,我使用了類模擬。
相關問題
- 1. 部分模擬類
- 2. OCMock facebook的塊模擬
- 3. OCMock - 試圖模擬NSEntityDescription
- 4. EasyMock:部分模擬類
- 5. OCMock在iOS 4
- 6. 使用OCMock來模擬[[UIDevice currentDevice] userInterfaceIdiom]
- 7. 如何使用OCMock模擬C函數
- 8. Python中的部分補丁與模擬
- 9. OCMock模擬協議的靜態類方法。
- 10. 如何使用OCMock模擬NSObject的類方法
- 11. 檢測iOS模擬器與iOS設備
- 12. Rhino Mocks部分模擬
- 13. DI的部分模擬?
- 14. OCMock類別
- 15. OCMock valueForKey與NSPredicate
- 16. OCMock類方法不工作
- 17. 如何在iOS模擬器菜單中啓用「調試」部分?
- 18. 用CocoaPods爲iOS設置OCMock
- 19. 模擬器的屏幕尺寸爲iPhone與iOS 6模擬器
- 20. iOS 4模擬器與Xcode 4.5.2
- 21. 引導3.1.1與iOS模擬器
- 22. IOS 7與物理模擬嵌套SKScenes
- 23. PNG預乘Alpha,iOS模擬器與iPad
- 24. iOS Xcode模擬器與藍牙4.0
- 25. 如何驗證部分模擬有一個使用ocmock的args調用的基礎方法?
- 26. iOS模擬器iOS版本
- 27. CNTK分類模型分類全部1
- 28. 好的模擬器/模擬器(Android,iOS)
- 29. 使用iOS模擬器模擬iPad 1
- 30. iOS模擬器和XCode模擬Compass?
感謝您的真正有用的答案。我有兩個後續問題:1)純粹的嘲弄不允許你調用任何真正的方法是真的嗎? 2)爲什麼你不能創建Foo的部分模擬,然後對doX方法進行期望? – user1802143
1.一個純粹的模擬不是由一個真實的對象支持的,但是從技術上講,你可以通過使用'andCall'或'andDo'設置任何模擬來調用任何方法 - 一個部分模擬允許你執行'andForwardToRealObject'。 2.你可以創建一個Foo的部分模擬 - 有時創建一個對象要麼有副作用,要麼涉及與你的測試無關的工作。此外,一個純粹的模擬不是一個很好的模擬會抱怨,當一個意想不到的方法被調用,而部分模擬不會。 –