问题标签 [ocunit]

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 投票
2 回答
1548 浏览

objective-c - 如何捕获 OCUnit 测试通过/失败消息/事件

我正在尝试将 xcodebuild 和 OCUnit 与我的持续集成服务器(TeamCity)一起使用。

JetBrains 为 boost::test 和 CppUnit 提供测试观察器实现,以 TeamCity 可以解释的方式格式化测试输出。如果我想使用 OCUnit,我需要为它做类似的事情。

OCUnit 中似乎有一个 SenTestObserver 类,但我不知道它应该如何使用,而且OCUnit 主页似乎没有提供任何有关此事的文档。

0 投票
4 回答
2370 浏览

iphone - iPhone 单元测试挂起;调用 -applicationDidFinishLaunching 失败:

我为我的 iPhone 项目设置了单元测试,该项目使用基于 OCUnit的Google Toolkit for Mac框架构建。我有一个名为“单元测试”的依赖项目,它根据需要构建和运行测试。

但后来一切都停止了,我无法理解。突然,我的“单元测试”可执行文件启动并就在那里等待,永远。它永远不会达到应用程序委托的-applicationDidFinishLaunching:方法,这就是所谓的实际单元测试。将 NSLog 插入委托的-init方法告诉我该方法被调用,但应用程序永远不会“完成”启动。

如果我修改运行“单元测试”可执行文件的 shell 脚本并取出-RegisterForSystemEvents参数,可执行文件立即存在(它不运行任何测试)并给我以下消息:

由于没有系统事件服务器而终止。
(如果您想在没有 SpringBoard 的情况下运行,请运行 EventPump 或传递参数“-RegisterForSystemEvents”。

由于它在我删除该参数时终止,所以我很好奇该参数到底是做什么的以及如何,因为它似乎会导致挂起。但由于没有它就无法运行测试,我需要确定如何让它再次工作。但是,Google 没有提供与当前情况相关的任何内容的链接,并且开发文档中的任何内容都没有帮助。

有任何想法吗?

0 投票
1 回答
1369 浏览

objective-c - 无法在 GNUstep/Win32 环境中构建 OCUnit - 找不到 objc/runtime.h

我正在尝试对 MinGW shell 中构建的 Objective-C 类进行单元测试。由于 OCUnit 已被 Apple 用于 XCode,因此开发人员 Sen:te 现在似乎已经专注于这一点。因此,声称支持 GNUstep 的最后一个源发行版是 v27。

无论如何,我下载了 v27 压缩包并尝试在 MinGW 中构建。您首先必须使用名为 SenFoundation\GSmakefile 的文件构建 Sen:te 基础类。

它持续了一段时间,直到我得到:

据我所知,在我的 GNUstep 树或驱动器上的其他任何地方都没有这样的文件。

有没有人在这方面取得了成功,或者至少知道 objc/runtime.h 来自哪里?

0 投票
3 回答
2503 浏览

xcode - OCUnit、NSLog 和 XCode 3.1

我一直在 XCode 3.0 中使用 OCUnit(XCode 附带的默认安装)。我很高兴能够运行我的测试并在 Build Results 窗口中查看结果,以及我输出的任何 NSLog() 消息。

但是,使用 XCode 3.1 测试运行良好,但我突然失去了 NSLog() 输出。有谁知道它去哪儿了?

0 投票
2 回答
10273 浏览

objective-c - OCUnit 测试 Objective-C 中的协议/回调/委托

使用 OCUnit,有没有办法测试委托协议?

我正在尝试这个,它不起作用。

我将尝试obj在不同的线程上调用该方法并让测试休眠,直到调用委托。似乎应该有一种更简单的方法来测试它。

0 投票
2 回答
2802 浏览

cocoa - 如何从命令行而不是 XCode 运行 OCTest

XCode 3.1.2 使用内置的 OCTest 单元测试。

运行单元测试时我遇到了崩溃。我想运行一些额外的环境变量(例如 MallocCheckHeapStart、MallocCheckHeapEach)。

我是一个初学者,不知道如何从命令行运行我的应用程序的 OCTest 单元测试。或者,说服 XCode 在启动单元测试时设置一些额外的环境变量。

0 投票
3 回答
10673 浏览

unit-testing - iPhone - 为逻辑单元测试检索资源

我一直在关注 Apple 关于为 iPhone 编写单元测试的文档,并且开箱即用,该例程似乎不起作用。我不确定我是否了解单元测试将在哪里获得对应用程序委托的引用。

我的依赖项如下: My_Program_target -> UnitTesting_target -> UnitTests_bundle

以下代码片段是断言失败的地方。我对 CPPUNIT 非常熟悉,但我无法理解它是如何跨越的。

此外:

我已经决定在我的方法中进行逻辑测试。我正在尝试读取一个 XML 文件,但我没有运气解决该捆绑包,这将为我提供访问文件的路径。我尝试粘贴 allBundles 的路径输出,但该路径似乎也不起作用。下面是我在测试中执行的内容(你可以看到我用来输出包路径的调试语句):

本质上,路径上的断言不成功,但我不确定要为路径或目录放置什么来引用我告诉我复制包资源的 unitTest 包。调用 [NSBundle mainBundle] 也不起作用。

0 投票
7 回答
14041 浏览

objective-c - Xcode中私有方法的单元测试

我正在一个玩具项目中尝试测试驱动开发。我可以让测试为我的类的公共接口工作(尽管我仍然在围栏上,因为我编写的测试代码比正在测试的方法中的要多)。

我倾向于使用很多私有方法,因为我喜欢保持公共接口干净;但是,我仍然想对这些方法进行测试。

由于 Cocoa 是一种动态语言,我仍然可以调用这些私有方法,但是我在测试中收到警告说我的类可能不会响应这些方法(尽管它显然会响应)。因为我喜欢在没有警告的情况下编译,所以我的问题是:

  1. 如何在 Xcode 中关闭这些警告?
  2. 我还能做些什么来关闭这些警告吗?
  3. 我在尝试“白盒”测试时做错了吗?
0 投票
1 回答
2127 浏览

objective-c - 为什么我的 OCUnit 测试失败并显示“代码 138”?

我目前正在尝试使用 XCode 3.1 学习objective-c。我一直在开发一个小程序,并决定为其添加单元测试。

我按照 Apple Developer 页面上的步骤进行操作 -使用 Xcode 3 和 Objective-C 进行自动化单元测试。当我添加我的第一个测试时,当测试失败时它运行良好,但是当我纠正测试时构建失败。Xcode 报如下错误:

错误:测试主机“/Users/joe/Desktop/OCT/build/Debug/OCT.app/Contents/MacOS/OCT”异常退出,代码为 138(它可能已崩溃)。

为了找出我的错误,我重新按照上面单元测试示例中的步骤操作,并且示例有效。当我添加代码的简化版本和测试用例时,错误返回。

这是我创建的代码:

卡片.h

卡.m

CardTestCases.h

CardTestCases.m

0 投票
1 回答
841 浏览

unit-testing - 使用 otest 调试测试时,如何将我的可执行文件链接到我的测试包?

我正在使用 Chris Hanson 出色的 Xcode 单元测试指南的混合体。

我的程序是一个(命令行)应用程序(它排除了使用可执行文件本身来运行测试),但我需要能够调试我的单元测试。

所以我所拥有的如下:

创建测试包和测试。创建新的测试目标,设置捆绑加载器和测试主机。添加主目标作为测试目标的直接依赖项。创建新的自定义可执行 otest。添加-SenTest self, MyTestBundle.octest, 参数。在环境中添加DYLD_LIBRARY_PATHDYLD_FRAMEWORK_PATH变量。

我的问题是,当我现在尝试通过运行可执行文件来调试测试时,测试引用的类不可用。例如,如果我为 Foo 类编写测试,一旦我在测试中实例化 Foo,我就会得到一个错误的访问异常。

如果我将 Foo.m 添加到测试目标,这将消失,但我宁愿不必将要测试的每个类都添加到测试目标和应用程序目标。

我假设我只需要添加某种变量,告诉 otest 在哪里可以找到我的主可执行文件中的类,但我不知道这个参数的名称是什么。

有人可以指出我解决这个问题的正确方向吗?