问题标签 [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 回答
223 浏览

macos - 模拟 NSWindowController

我有一个 Mac 应用程序,实际上是一个 NSStatusItem,我正在尝试测试它的首选项窗口。我将此代码用作模型,因为它的工作方式与我的代码非常相似,只是我的窗口已初始化并显示在 applicationDidFinishLaunching 以外的函数中。 http://bit.ly/wH6QOk

我收到错误:未调用预期的方法:窗口

我不明白为什么会这样。这是我的测试代码:

0 投票
1 回答
1688 浏览

objective-c - OCMock 在运行时失败

我第一次尝试在我的测试用例中使用 OCMock。这是一个 Mac 项目,在 Xcode 4.3 中构建并以 Lion 为目标。主应用程序和测试包都打开了 ARC,因此每次执行测试时,我都会看到以下日志消息:

GC: forcing GC OFF because OBJC_DISABLE_GC is set

没关系,因为我使用的是 ARC,所以我不关心 GC。当我构建我的单元测试时,链接到 OCMock 的最新稳定版本(2.0.1),构建没有问题。在运行时,在上述日志语句之后,我得到以下信息:

The test bundle at /Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest could not be loaded because its Objective-C runtime information does not match the runtime information required by the test rig. This is likely because the test rig is being run with Objective-C garbage collection disabled, but the test bundle requires Objective-C garbage collection. To enable Objective-C garbage collection for the test rig, run it in an environment without the OBJC_DISABLE_GC environment variable. 2012-03-06 10:29:32.812 otest[8486:203] *** NSTask: Task create for path '/Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest/Contents/MacOS/___Tests' failed: 22, "Invalid argument". Terminating temporary process.

该消息暗示垃圾收集是最常见的罪魁祸首,但如前所述,我无法使用 GC。那么,还有哪些其他设置可能会在运行时搞砸我呢?我不认为我在做任何非典型的事情,我已经查看了我的测试项目的设置以确保,并没有看到任何奇怪的东西。

更新

我能够用一个新的空项目重现这一点。

  1. 创建一个新项目并让它创建单元测试,启用 ARC
  2. 从单元测试包的构建设置中清除Test Host设置
  3. 链接到 OCMock 框架
  4. 执行测试,并见证我上面报告的相同错误

另外,当我关闭 ARC 并进行垃圾收集时,会报告machclang -o 链接器错误,因此构建不会成功。如果我删除到 OCMock 框架的链接,它就可以正常构建。这支持了我最初的想法,即问题出在垃圾收集以外的地方。

0 投票
3 回答
2669 浏览

objective-c - 使用 OCMock 模拟 KVO

我想测试一下 Key-Value-Observation 是否适用于我的一类。它有一个属性,它依赖于另一个属性。它们是这样设置的:

我想运行一个单元测试来验证当firstProperty更改时,绑定到的对象secondProperty会收到通知。起初我以为我会用+[OCMockObject observerMock],但看起来只能用NSNotificationCenter。测试这个的最好方法是什么?

0 投票
3 回答
1188 浏览

objective-c - 如何存根/注入视图控制器以在 iOS 5 运行时进行基于状态的测试?

我正在寻找一种“最佳实践”/“低测试摩擦”的方式来对我的基础 AppDelegate 类中的视图控制器进行基于状态的测试。目前,当在类的方法中发生某些事情时,下面提供了一种简单的方法来存根我自己的 UIViewController(使用 ocmock)。

我的第一个问题 - 这是一种有效的方法来存根/注入我自己的模拟视图控制器进行测试吗?(似乎工作得很好,但我不确定这是否是专业人士今天进行基于状态的测试的方式)

我的下一个问题 - 像这样在内存中保留 1 个视图控制器副本是否有效(在应用程序的整个生命周期内只从头开始创建一次)?

**注意-我会依赖注入它,但我的 init 已经足够大,只需要注入导航控制器和标签栏控制器,所以遗憾的是,这不是这个大类的选项

0 投票
1 回答
1473 浏览

objective-c - 如何使用 ocmock 验证部分模拟是否具有使用 args 调用的基本方法?

我正在使用一个非常简单的 Web 服务,它使用基类来重用一些常用功能。被测试的 main 方法只是简单地构建一个 url,然后它使用带有这个参数的 super / base 方法。

这是基本方法定义

在我的测试中,我创建了一个部分模拟,因为我仍然想调用我的测试对象,但我需要能够验证超级方法是以特定方式调用的。

然而,当我运行此测试时,我失败并出现以下错误:

未调用预期的方法:makeGetRequestWithURL:https://...

我可以说这个方法没有被模拟,因为如果我将 NSLog 放入基本方法中,它会在我运行 ocunit 测试时显示(显然它正在运行,只是没有按照我的意愿模拟它)。

如何修改我的测试/重构我的实现代码以获得我正在寻找的断言?

0 投票
4 回答
1185 浏览

iphone - 如何使用 ocmock 在基于类的方法上存根返回值

我正在编写一个测试来验证位置服务是否在单击按钮时启动。这需要一个非常简单的 if 语句来确保手机有可用的定位服务。

现在的工作测试看起来像这样

现在测试的实现看起来像这样

除了该方法在 iOS 4.0 中已弃用之外,一切都很好。所以现在我需要改用类方法 [CLLocationManager locationServicesEnabled]。

问题是我似乎无法找到 ocmock 是否支持此功能,如果不支持,我现在应该如何解决这个问题。

0 投票
6 回答
9412 浏览

ios - 如何对 NSURLConnection 委托进行单元测试?

如何对我的 NSURLConnection 委托进行单元测试?我创建了一个 ConnectionDelegate 类,它符合不同的协议,将来自网络的数据提供给不同的 ViewController。在我走得太远之前,我想开始编写我的单元测试。但我不知道如何在没有互联网连接的情况下将它们作为一个单元进行测试。我还想如何处理异步回调。

0 投票
1 回答
675 浏览

objective-c - 将 OCMock 类转换为 ARC 时前向声明错误

我刚刚升级到 Xcode 版本 4.3.2 (4E2002)。我正在将模拟类从手动内存管理转换为 ARC。

代码如下所示:

@interface 看起来像这样:

编译器抱怨说:

“mockedProtocol”在描述方法中突出显示。

我以前遇到过这个问题。在 ARC 模式下,通常是因为编译器对前向引用更严格,您只需要包含适当的头文件即可。

但是,我能找到的唯一“Protocol.h”是

导入这个没有任何作用。此外,将导入添加到 OCProtocolMockObject.h 没有任何作用。还有其他一些我不知道的 Protocol.h 吗?

0 投票
1 回答
508 浏览

objective-c - OCMock - 试图模拟 NSEntityDescription

为了测试托管类,我尝试在单元测试中创建一个实例,首先尝试模拟 NSEntityDescription 和 NSManagedObjectContext。

但是在我进一步了解之前,我在运行测试时收到以下错误;

架构 i386 的未定义符号:“_OBJC_CLASS_$_NSEntityDescription”,引用自:CallsCoordinatorTests.o 中的 objc-class-ref “_OBJC_CLASS_$_NSManagedObjectContext”,引用自:CallsCoordinatorTests.o 中的 objc-class-ref ld:未找到符号对于架构 i386 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

请问有什么建议吗?谢谢

0 投票
1 回答
347 浏览

objective-c - 带有模拟 Web 服务的单元测试不断崩溃

对于我的项目,我想做一点 TDD,尽管我对 Objective C 和单元测试还很陌生。我创建了一个连接到返回 json 响应的 Web 服务的项目。现在我创建了一个单元测试来模拟 Web 服务并且它一直在崩溃(甚至没有失败),我现在完全迷失了......

我有以下设置:

SignUpService(创建一个新帐户)使用ServiceHelper(发出实际的 http Web 服务请求)。像这样ServiceHelper.h

SignUpService.h

接下来是单元测试(SignUpServiceTests.h 和实现)

和实施:

该项目包含 OCMock 1.77 版和 OCHamcrest 库。

由于某种原因,测试不断崩溃,并显示“进程以退出代码 0 完成”。当我调试时,我看不到出了什么问题。我觉得它与内存管理有关,还是与 OCMock 和 ARC 有关?(就像这里这里建议的那样)

对新手 Objective C 开发人员有什么想法或建议吗?