问题标签 [ocmock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 当参数不是预期的参数时,OCMock 抛出 NSInternalInconsistencyException
我正在为委托对象设置一个模拟对象,以检查当 URL 为 nil 时,以 nil 作为参数调用委托方法。
当FileDownloadOperation
行为符合预期时,测试通过,这很好。
当FileDownloadOperation
不调用委托方法时,测试会按预期失败。
但是,当FileDownloadOperation
调用委托方法时nil
,不是失败,而是失败,测试崩溃并且没有其他测试被执行,因为OCMock
throws :
'NSInternalInconsistencyException' 原因:'OCMockObject [FileDownloadOperationTest]:调用了意外的方法:数据:<> forURL:nil
这是预期的行为吗?还是我做错了什么?谢谢 !
xcode - 将原语传递给 OCMock 的存根
我正在学习如何使用 OCMock 来测试我的 iPhone 的项目,我有这样的场景:一个带有getHeightAtX:andY:
方法的 HeightMap 类,以及一个使用HeightMap
. 我正在尝试使用一些HeightMap
模拟对渲染进行单元测试。这有效:
当然,仅适用于x=0
and y=0
。我想使用“平面”高度图进行测试。这意味着我需要做这样的事情:
但这会引发两个编译警告:
警告:传递参数 1
'getHeightAtX:andY:'
从指针生成整数而不进行强制转换
和运行时错误:
调用了意外的方法:
'getHeightAtX:0 andY:0 stubbed: getHeightAtX:15545040 andY:15545024'
我错过了什么?我发现没有办法将 a 传递anyValue
给这个模拟。
objective-c - 如何使用核心数据进行依赖注入
我正在玩弄使用 Core Data 来管理对象图,主要用于依赖注入(NSManagedObjects 的一个子集确实需要持久化,但这不是我问题的重点)。运行单元测试时,我想接管 NSManagedObjects 的创建,用模拟替换它们。
我现在确实有一种候选方法,即使用运行时的 method_exchangeImplementations[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:]
与我自己的实现进行交换(即返回模拟)。这适用于我所做的一个小测试。
我对此有两个问题:
- 有没有比 swizzling insertNewObjectForEntityForName:inManagedObjectContext 更好的方法来替换 Core Data 的对象创建?我还没有深入研究运行时或核心数据,可能会遗漏一些明显的东西。
- 我的替换对象创建方法概念是返回模拟的 NSManagedObjects。我正在使用 OCMock,它不会直接模拟 NSManagedObject 子类,因为它们是动态
@property
的。现在我的 NSManagedObject 的客户正在与协议而不是具体对象交谈,所以我返回模拟协议而不是具体对象。有没有更好的办法?
这是一些伪代码来说明我的意思。这是我可能正在测试的一个类:
我决定制作 Thingy 和 Thingo NSManagedObject 子类,也许是为了持久性等,但也可以用类似的东西替换 init:
然后在我的单元测试中,我可以执行以下操作:
...我的[]FakeEntityDescription insertNewObjectForEntityForName:inManagedObjectContext]
返回模拟代替了真正的 NSManagedObjects(或它们实现的协议)。这些模拟的唯一目的是在对 ClassUnderTest 进行单元测试时验证对它们的调用。所有返回值都将被存根(包括任何引用其他 NSManagedObjects 的 getter)。
我的测试ClassUnderTest
实例将在单元测试中创建,因此:
ClassUnderTest *testObject = [ClassUnderTest initWithManagedObjectContext:mockContext];
(上下文实际上不会在测试中使用,因为我的 swizzled insertNewObjectForEntityForName:inManagedObjectContext
)
这一切的重点?无论如何,我将在许多类中使用 Core Data,所以我不妨使用它来帮助减轻管理构造函数更改的负担(每个构造函数更改都涉及编辑所有客户端,包括一堆单元测试)。如果我没有使用 Core Data,我可能会考虑使用Objection 之类的东西。
ios - 延迟 OCMock 验证/处理单元测试中的超时
我正在使用 OCMock 测试真正的 Web 服务调用。
现在我正在做类似的事情:
它工作正常,但这意味着每次这样的测试都需要 2 秒。
有没有办法可以设置例如 2 秒的超时,并立即调用someMethod
并mydelegatemock
完成verify
测试用例?
objective-c - 如何使用 OCMock 初始化具有存根值的对象
我如何存根 init 方法中使用的方法?
我班的相关方法:
我的测试:
我的结果:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“OCMockObject [AdViewController]:调用了意外的方法:smallAdRight”
那么我将如何访问 OCMockObject 中的 AdViewController 呢?
objective-c - 使用从测试方法调用的方法的类的 OCMock
我正在尝试测试一个实例化MFMailComposeViewController
. 被测试的方法调用了几种方法,MFMailComposeViewController
包括setSubject:
.
我想测试 setSubject 是否发送了一个特定的 NSString,在本例中为 @"Test Message"。
无论我为模拟存根中的预期字符串指定什么,都没有失败。
在单元测试类中:
在测试类中:
测试应该失败了。
我正在 iOS 模拟器中对此进行测试,并在设备上得到相同的结果。
我究竟做错了什么?有没有办法做到这一点?
objective-c - OCMock 测试结构的地址
我有一些要测试的代码正在传递结构的地址:
我嘲笑someObject
返回记录:
不幸的是,OCMock 失败了(我相信),因为将结构拉出 NSValue 包装器将始终返回不同的地址。
如果其中一个参数是结构的地址,有没有办法让期望正常工作?
iphone - 为什么我的 OCMock 预期和存根在 iOS 5 中失败?
我有一些简单的模拟对象,并设置了一些存根和期望。当我在 iOS 4.3 模拟器上运行测试时,一切都通过了。当我在 iOS 5 上运行时,我得到“意外调用方法”失败。作为一个例子,我有一个方法- (void) foo: (NSString *) bar
,我设置了一个期望然后运行。结果是
任何人都知道为什么会发生这种情况,或者如何解决它?测试本身非常好,并且已经在 iOS 4 中运行了几个月。
objective-c - Objective-C - 使用 OCMock 模拟分段控件?
我正在尝试模拟分段控件,但我遇到了崩溃,有什么建议吗?
我在模拟对象上调用 selectedSegmentIndex 后立即崩溃:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“预期调用对象返回类型。”
exception - 带有 partialMockForObject 和 UIView 的 EXC_BAD_ACCESS
我在使用 OCMock 和 UIView 时遇到了一些麻烦。
我有这样的代码:
而且我确实经常在 [[[view1Mock expect] andForwardToRealObject] removeFromSuperview] 上得到 EXC_BAD_ACCESS。但不是每次。这很烦人,因为我无法在 OCMock 上找到它,而且它并非每次都发生。
任何的想法?
编辑:
我使用启用了 ARC 的新 Apple LLVM 3.0 编译器,我认为这可能是原因。但我想修复它。有没有人试过用ARC编译OCMock?
最良好的祝愿,丹尼尔