问题标签 [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.

0 投票
1 回答
1425 浏览

ios - 当参数不是预期的参数时,OCMock 抛出 NSInternalInconsistencyException

我正在为委托对象设置一个模拟对象,以检查当 URL 为 nil 时,以 nil 作为参数调用委托方法。

FileDownloadOperation行为符合预期时,测试通过,这很好。

FileDownloadOperation不调用委托方法时,测试会按预期失败。

但是,当FileDownloadOperation调用委托方法时nil,不是失败,而是失败,测试崩溃并且没有其他测试被执行,因为OCMockthrows :

'NSInternalInconsistencyException' 原因:'OCMockObject [FileDownloadOperationTest]:调用了意外的方法:数据:<> forURL:nil

这是预期的行为吗?还是我做错了什么?谢谢 !

0 投票
6 回答
18510 浏览

xcode - 将原语传递给 OCMock 的存根

我正在学习如何使用 OCMock 来测试我的 iPhone 的项目,我有这样的场景:一个带有getHeightAtX:andY:方法的 HeightMap 类,以及一个使用HeightMap. 我正在尝试使用一些HeightMap模拟对渲染进行单元测试。这有效:

当然,仅适用于x=0and y=0。我想使用“平面”高度图进行测试。这意味着我需要做这样的事情:

但这会引发两个编译警告:

警告:传递参数 1'getHeightAtX:andY:'从指针生成整数而不进行强制转换

和运行时错误:

调用了意外的方法:'getHeightAtX:0 andY:0 stubbed: getHeightAtX:15545040 andY:15545024'

我错过了什么?我发现没有办法将 a 传递anyValue给这个模拟。

0 投票
4 回答
2624 浏览

objective-c - 如何使用核心数据进行依赖注入

我正在玩弄使用 Core Data 来管理对象图,主要用于依赖注入(NSManagedObjects 的一个子集确实需要持久化,但这不是我问题的重点)。运行单元测试时,我想接管 NSManagedObjects 的创建,用模拟替换它们。

我现在确实有一种候选方法,即使用运行时的 method_exchangeImplementations[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:]与我自己的实现进行交换(即返回模拟)。这适用于我所做的一个小测试。

我对此有两个问题:

  1. 有没有比 swizzling insertNewObjectForEntityForName:inManagedObjectContext 更好的方法来替换 Core Data 的对象创建?我还没有深入研究运行时或核心数据,可能会遗漏一些明显的东西。
  2. 我的替换对象创建方法概念是返回模拟的 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 之类的东西。

0 投票
3 回答
3055 浏览

ios - 延迟 OCMock 验证/处理单元测试中的超时

我正在使用 OCMock 测试真正的 Web 服务调用。

现在我正在做类似的事情

它工作正常,但这意味着每次这样的测试都需要 2 秒。

有没有办法可以设置例如 2 秒的超时,并立即调用someMethodmydelegatemock完成verify测试用例?

0 投票
1 回答
3814 浏览

objective-c - 如何使用 OCMock 初始化具有存根值的对象

我如何存根 init 方法中使用的方法?

我班的相关方法:

我的测试:

我的结果:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“OCMockObject [AdViewController]:调用了意外的方法:smallAdRight”

那么我将如何访问 OCMockObject 中的 AdViewController 呢?

0 投票
2 回答
3281 浏览

objective-c - 使用从测试方法调用的方法的类的 OCMock

我正在尝试测试一个实例化MFMailComposeViewController. 被测试的方法调用了几种方法,MFMailComposeViewController包括setSubject:.

我想测试 setSubject 是否发送了一个特定的 NSString,在本例中为 @"Test Message"。
无论我为模拟存根中的预期字符串指定什么,都没有失败。

在单元测试类中:

在测试类中:

测试应该失败了。

我正在 iOS 模拟器中对此进行测试,并在设备上得到相同的结果。

我究竟做错了什么?有没有办法做到这一点?

0 投票
1 回答
372 浏览

objective-c - OCMock 测试结构的地址

我有一些要测试的代码正在传递结构的地址:

我嘲笑someObject返回记录:

不幸的是,OCMock 失败了(我相信),因为将结构拉出 NSValue 包装器将始终返回不同的地址。

如果其中一个参数是结构的地址,有没有办法让期望正常工作?

0 投票
2 回答
463 浏览

iphone - 为什么我的 OCMock 预期和存根在 iOS 5 中失败?

我有一些简单的模拟对象,并设置了一些存根和期望。当我在 iOS 4.3 模拟器上运行测试时,一切都通过了。当我在 iOS 5 上运行时,我得到“意外调用方法”失败。作为一个例子,我有一个方法- (void) foo: (NSString *) bar,我设置了一个期望然后运行。结果是

任何人都知道为什么会发生这种情况,或者如何解决它?测试本身非常好,并且已经在 iOS 4 中运行了几个月。

0 投票
1 回答
650 浏览

objective-c - Objective-C - 使用 OCMock 模拟分段控件?

我正在尝试模拟分段控件,但我遇到了崩溃,有什么建议吗?

我在模拟对象上调用 selectedSegmentIndex 后立即崩溃:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“预期调用对象返回类型。”

0 投票
2 回答
639 浏览

exception - 带有 partialMockForObject 和 UIView 的 EXC_BAD_ACCESS

我在使用 OCMock 和 UIView 时遇到了一些麻烦。

我有这样的代码:

而且我确实经常在 [[[view1Mock expect] andForwardToRealObject] removeFromSuperview] 上得到 EXC_BAD_ACCESS。但不是每次。这很烦人,因为我无法在 OCMock 上找到它,而且它并非每次都发生。

任何的想法?

编辑:

我使用启用了 ARC 的新 Apple LLVM 3.0 编译器,我认为这可能是原因。但我想修复它。有没有人试过用ARC编译OCMock?

最良好的祝愿,丹尼尔