问题标签 [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 投票
4 回答
1052 浏览

ios4 - 测试台异常退出,代码为 134,在 iOS 4 上使用 OCMock 验证

我正在尝试将 OCMock 添加到我的 iOS 4 项目中。为了测试它,我有一个Person带有一种方法的类,-hello. 当我运行这个测试时:

一切都很好,构建成功。如果我hello接听电话,如下所示:

我希望收到一条错误消息,告诉我在模拟上没有调用我的预期方法。相反,我收到一条关于测试台崩溃的神秘消息:

当未调用预期方法时,这种崩溃是否正常?我的配置不好?

0 投票
3 回答
2151 浏览

objective-c - 如何对 Internet 协议实现进行单元测试?

我决定将单元测试添加到我的项目中,并以测试驱动的方式继续开发。我目前正在为我的 ManageSieve 客户端对象实施单元测试,但我不确定测试该野兽的最佳方法是什么。

我的SieveClient对象依赖于其他两个对象进行网络通信:CocoaAsyncSocket以及我自己的SaslConn对象,它是我对 Cyrus SASL 库的包装,用于处理身份验证方法。为了测试,我需要用模拟对象替换那些。我将为此使用 OCMock 框架。我不太确定如何执行此操作,因为 SieveClient 对象需要自己创建这些对象。现在我覆盖了该对象的(私有)设置器,以始终使用 OCMockspartialMockForObject:方法安装我的模拟对象。但这对我来说感觉不对。有什么想法可以更好地解决这个问题吗?

我遇到的另一部分是套接字本身。为了能够测试协议细节,我需要一种从套接字返回预定义测试数据的方法。我想我可以使用 OCMock 机制来伪造来自套接字的返回值。但是由于CocoaAsyncSocket提供了许多不同的方法来从套接字读取数据,所以我必须确切地知道协议对象以何种顺序使用了哪些数据。我不希望我的单元测试依赖于我的协议对象的实现细节。那么我应该在这里做什么?手动为套接字类实现一个模拟对象?这似乎并不简单,所以我可能也需要单元测试。这是一个好主意吗?

我读过,如果某些东西很难测试,那么它的设计也可能不是很好。但我看不出我能做得更好,因为困难的部分在于与我必须做的套接字交互。

如果您想查看代码,可以在 Bitbucket 中找到:SieveClient.mSieveClient.h

编辑:依赖注入

所以我读到了依赖注入,我想我将使用它来将AsyncSocketandSaslConn对象放入我的SieveClient对象中。我将更改我的构造函数以接受这些对象并使用它们。由于此类的用户通常不关心套接字和 SASL 对象,因此我将添加一个工厂方法(以便利构造函数的形式),它只创建这些对象并将它们传递给构造函数。

但这仅解决了我的测试问题的第一部分(也是更简单的部分)。

0 投票
2 回答
3927 浏览

iphone - OCMock:为什么在尝试调用 UIWebView 模拟时会出现无法识别的选择器异常?

编辑:这都是由我的其他链接标志设置中的拼写错误引起的。有关更多信息,请参阅下面的答案。


我正在尝试模拟 UIWebView 以便我可以验证在 iOS 视图控制器的测试期间是否调用了其上的方法。我正在使用从 SVN 修订版 70(截至本问题的最新版本)构建的 OCMock 静态库,以及来自 SVN 的 Google Toolbox for Mac (GTM) 单元测试框架修订版 410。当视图控制器尝试调用预期的方法时,我收到以下错误。

我的测试代码是:

我的视图控制器代码是:

我确实发现如果我改为使用测试将成功运行:

但是,只要我添加了被注释掉的期望,使用部分模拟时就会返回错误。

我有其他在同一个项目中成功使用模拟的测试。

有任何想法吗?OCMock 是否支持模拟 UIKit 对象?

编辑:根据以下答案中的建议,我尝试了以下测试,但遇到了同样的错误:

0 投票
3 回答
11976 浏览

cocoa - 使用 OCMock 存根返回 BOOL 的方法

我正在使用 OCMock 1.70 并且在模拟一个返回 BOOL 值的简单方法时遇到问题。这是我的代码:

我究竟做错了什么?

0 投票
1 回答
981 浏览

iphone - 你知道 iPhone / iPad 上一个好的 OCMock with GHUnit 教程吗?

我在我的项目中使用 GHUnit,我需要了解 OCMock 以完成我的单元测试(但我是新手)。我正在使用 xcode 3.2.5

有人知道关于 OCMock 的好教程吗?

谢谢。

0 投票
4 回答
4376 浏览

objective-c - 在 UIViewController 上设置只读 navigationController 属性以进行模拟

我使用 OCMock 创建了一个模拟 UINavigationController。但是,我不能将它分配给 UIViewController 的 navigationController 属性,因为该属性是只读的。

这篇博文的作者声称找到了解决方案,但忽略了分享。

0 投票
2 回答
808 浏览

unit-testing - 使用 OCMock 检查 IBOutlet 连接

我想通过单元测试验证IBoutlet我的控制器类中的所有 s 是否正确连接到 NIB 文件中。我想用 OCMock 来做这件事——即使我知道我可以简单地断言控制器变量不在nil加载 NIB 之后。这更多的是对流程如何工作的一般理解 - 据我所知,这也应该有效。

NIBOnOffSwitchCell作为其 File's Owner OnOffSwitchCellController。这是我的测试方法:

guiBundle存在并被验证为有效的 NSBundle 对象。

据我了解loadNibNamed:owner:options:将反序列化NIB中的对象,调用awakeAfterUsingCoder:然后通过调用setValue:forKey:每个出口来设置出口。

我又添加了三个断言,以确保加载的 NIB 实际上包含正确的对象——当我放入真实控制器的实例时,这些断言通过了。但是当我使用如上所示的模拟时,它甚至没有走到这一步。相反,测试会因此崩溃:

因此awakeAfterUsingCoder:,尽管我显然预料到了,但它却在抱怨这个电话是出乎意料的。

我还尝试消除这种期望并用一个不会报告多余方法调用的漂亮模拟替换模拟,但它仍然会中止并报告setValue:forKey:没有被调用。

我在这里想念什么?

0 投票
1 回答
1573 浏览

cocoa - OCMock 异步阻塞回调

我正在构建一个小型库来为我处理文件上传和下载操作,并试图将一套测试集成到其中。我没有使用委托回调方法,而是在完成处理程序块中处理异步响应,如下所示:

底层uploadFileWithFilename...方法是这样的:

我看到一个例子,这个人使用预处理器定义并将 OCMock 注入到实际的代码库中。这对我来说似乎是错误的。

测试这样一段代码的最佳策略是什么?

0 投票
2 回答
2257 浏览

objective-c - Objective C - 单元测试和模拟对象?

我正在使用 OCUnit 在以下方法中,我如何模拟我的 WebService 对象或方法“startSynchronous”的结果以便能够编写独立的单元测试?

是否可以在其中注入一些代码来创建模拟 Web 服务或在 startSynchronous 调用上返回模拟数据?

0 投票
1 回答
798 浏览

iphone - 是否有任何可用于 Objective-C 的测试间谍库?

我想在 iOS 项目中采用 BDD 方法进行单元测试,我刚刚意识到可能没有一个现有的库可以提供测试间谍种类的测试替身。理想情况下,我正在寻找类似于MockitoJasmineRR的东西。

在我花一周的空闲时间编写一个测试间谍库之前,我想我会先在 SO 上提出这个问题。

到目前为止,我已经查看了OCMockKiwi,但它们似乎都是传统的高规格默认模拟框架,需要在安排阶段设置期望断言,在行为阶段之前。显然,这阻碍了我对美丽、干燥、嵌套规范的愿景(我计划在KiwiCedar中创作)。