Я изучаю OCMock для тестирования iOS. В чем разница между «классным макетом» и «частичным макетом», и когда вы должны использовать один против другого?iOS OCMock partial vs class mock
6
A
ответ
12
Class mocks
создавать объекты, которые являются чистыми издеваются экземпляр класса.
Partial mocks
Сделайте экземпляр класса a, чтобы вы могли заглушить любой из его методов.
Предположим, у меня есть эти классы:
@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:
метод тестирования Бара. Я ожидаю, что он назовет doX
на объекте Foo
, а затем называть его собственным методом doB
. Я бы реализовал это, используя макет класса Foo и частичный макет бара.
- (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. OCMock Partial mock только для класса потомков
- 2. OCMock partial mock tear down issue
- 3. Разница между «NICE» «PARTIAL» и «MOCK» в OCMock ios7
- 4. OCMock 3 Partial Mock: методы класса и время выполнения objc
- 5. OCMock facebook block mock
- 6. OCMock setup mock class, его свойства и получить базовое понимание
- 7. Scala Mock partial stubbing
- 8. Rhino Mocks Partial Mock
- 9. Stub setter в Rhino Mock partial mock
- 10. Пользовательское свойство Partial Class
- 11. Метод статического класса OCMock mock protocol.
- 12. Partial Class Constructor
- 13. Использование Partial class (.dbml)
- 14. C# partial class
- 15. Sealed-Partial Class
- 16. partial class in C++
- 17. OCMock не работает должным образом в iOS?
- 18. htmlHelper vs partial view
- 19. ASP.NET Partial Page Class Names Best Practices
- 20. Moq. Mock system class
- 21. Mock java.time.format.DateTimeFormatter class
- 22. LINQ 2 SQL: Partial Class
- 23. C# backgroundworker и partial class
- 24. OcMock vs OcMockito - каковы плюсы и минусы
- 25. JMockit Partial mock - Все методы, кроме одного
- 26. Можно ли заглушить NSProcessInfo с помощью OCMock?
- 27. mocking a class - iOS
- 28. Rhino mock vs Typemock vs JustMock vs
- 29. Mock final class in Spock
- 30. Mock Tornado class in Python
Спасибо за действительно полезный ответ. У меня есть два вопроса: 1) Правда ли, что чистые издевательства не позволяют вам называть какие-либо реальные методы? 2) Почему вы не могли создать частичный макет Foo, а затем ожидать от метода doX? – user1802143
1. Чистый макет не поддерживается реальным объектом, но технически вы можете настроить любой макет для вызова любого метода с помощью 'andCall' или' andDo' - частичный макет позволяет вам делать и andwardwardToRealObject'. 2. Вы можете создать частичный макет Foo - иногда создание объекта имеет побочные эффекты или предполагает работу, не относящуюся к вашему тесту. Кроме того, чистый макет, который не является хорошим макетом, будет жаловаться, когда вызывается неожиданный метод, тогда как частичный макет не будет. –