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

objective-c - 如何为框架配置 OCUnit 测试包?

我一直在开发 Mac OS X 框架,我想在我的 XCode 3.2.1 项目中使用 OCUnit。我已经学习了几个关于如何配置 OCUnit 测试包的教程。问题是,当我创建一个使用在其中一个框架源中定义的函数的测试用例时,我收到一个构建错误,告诉我找不到该符号。

正如教程所说,我使测试包依赖于我的项目目标,但这似乎不是问题。首先,我认为我可以通过将框架的源文件拖到测试包目标中的编译源部分来解决这个问题,但随后从该源文件引用的所有符号开始出现在构建错误中,所以这似乎不是是一个很好的解决方案/想法。

如何配置我的单元测试包以使其正确构建?

0 投票
5 回答
571 浏览

objective-c - 如何实现或模拟“抽象”OCUnit 测试类?

我有许多按继承层次结构组织的 Objective-C 类。它们都有一个共同的父级,该父级实现了子级之间共享的所有行为。每个子类都定义了一些使其工作的方法,并且父类为旨在由其子类实现/覆盖的方法引发异常。这有效地使父类成为伪抽象类(因为它本身没有用),即使 Objective-C 没有明确支持抽象类。

这个问题的症结在于我正在使用 OCUnit 对这个类层次结构进行单元测试,并且测试的结构类似:一个测试常见行为的测试类,其子类对应于每个被测子类。然而,在(有效抽象的)父类上运行测试用例是有问题的,因为如果没有关键方法,单元测试将以惊人的方式失败。(在 5 个测试类中重复常见测试的替代方法实际上并不是一个可接受的选择。)

我一直在使用的非理想解决方案是检查(在每个测试方法中)实例是否是父测试类,如果是则退出。这会导致在每个测试方法中重复代码,如果一个人的单元测试非常精细,这个问题会变得越来越烦人。此外,所有此类测试仍会执行并报告为成功,这会影响实际运行的有意义测试的数量。

我更喜欢向 OCUnit 发出信号“不要在这个类中运行任何测试,只在它的子类中运行它们”。据我所知,(还)没有一种方法可以做到这一点,类似于+(BOOL)isAbstractTest我可以实现/覆盖的方法。关于以最少重复次数解决此问题的更好方法的任何想法?OCUnit 是否有能力以这种方式标记测试类,或者是时候提交 Radar 了吗?


编辑:这是有问题的测试代码的链接。注意启动方法的频繁重复if (...) return;,包括NonConcreteClass()为简洁起见使用宏。

0 投票
1 回答
1230 浏览

objective-c - Xcode Objective-c 使用 OCUnit (SenTestingKit) 警告“为不存在的方法创建选择器”

尝试使用 OCUnit (SenTestingKit) 编写一些单元测试时,我开始在 XCode 中收到如下警告。

这是我应该担心的事情,还是我可以通过一些编译器标志以某种方式禁用这些类型的警告?

0 投票
1 回答
427 浏览

iphone - 单元测试仅在活动 SDK 为“模拟器”时自动运行?

我已按照 Apple 为iPhone 上的单元测试应用程序发布的说明进行操作,当我将活动 SDK 设置为“iPhone Simulator”时,一切正常。我将它配置为始终构建和运行我的测试作为构建应用程序本身的一部分。

Apple 暗示(通过省略)这应该一直有效,但是当我将活动 SDK 设置为“iPhone 设备”时会跳过测试。我也与 OCMock 链接,而不是失败的测试,这个警告是在构建日志中:

ld: warning: in .../build/Debug-iphoneos/OCMock.framework/OCMock, missing required architecture arm in file

将单元测试包作为主应用程序的依赖项非常好,因此这些测试在每次构建时运行,但如果它在设备构建期间不起作用,它的实用性会大大降低。这是一个已知但未记录的限制吗?

0 投票
2 回答
1703 浏览

iphone - 为 iPhone / iPad 编写单元测试的最佳方法是什么?

我正在开发一个 iPad 应用程序。我不确定我是否应该为这个应用程序编写单元测试,如果是的话,我应该如何编写它们。

您认为为 iPhone / iPad 编写单元测试的最佳方法是什么?

0 投票
1 回答
661 浏览

iphone - 如何编写用于在框中绘制文本/字符串的测试用例?

我正在一个矩形框架中绘制字符串。绳子画得很完美。现在我需要使用 sentesting kit 编写测试用例。我不知道应该从哪里开始。为了获得帮助,我还看到了iPhone 示例计算器应用程序

但还是不顺。

任何有想法的人请帮忙。

谢谢,

马杜普

0 投票
6 回答
4719 浏览

objective-c - OCUnit 测试嵌入式框架

更新:我最终放弃并将 GHUnit 添加到我的项目中。我在几分钟内就启动并运行了 GHUnit。

更新:您可以在此处下载 Xcode 项目:http: //github.com/d11wtq/Cioccolata

我已经在我的 Xcode 项目中添加了一个单元测试目标,但是它在构建时找不到我的框架,说:

Test.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.

我的框架(主要项目目标)设计为嵌入式,因此安装路径为@executable_path/../Frameworks.

我已将该框架标记为测试目标的直接依赖项,并将其添加到“Link Binary with Libraries”构建阶段。

此外,我添加了“复制文件”的第一步(在构建依赖项之后),它只是将框架复制到单元测试包的框架目录。

有人有这方面的经验吗?我不确定我错过了什么。

编辑 | 我很确定我不应该这样做,因为框架不可执行,但我没有设置“测试主机”和“捆绑加载器”。这应该(据我了解)一切正常,因为测试包与框架链接,并且会像任何其他包一样加载它。

编辑 | 我想我快到了。我阅读了以下文章,该文章规定使用@rpath 而不是@executable_path。

http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/

在这种情况下,它非常有意义,因为 OCUnit 测试包不是可执行文件,它是一个普通的旧包,所以 @executable_path 不兼容。所以现在我的框架将其安装目录设置为@rpath,并且测试目标将其运行时搜索路径(rpath)定义为构建目录。这让我不必将框架复制到测试包中,这意味着总体上生成的框架在本质上更加灵活,因为它可以存在于任何地方。

现在,我也意识到我应该在 Test 目标上设置 Bundle Loader,所以现在将其设置为框架二进制文件的路径。

我可以构建测试目标,并且可以从框架中#import 类,没有错误。但是,一旦我尝试从框架中实例化一个类,我就会收到以下错误:

/Developer/Tools/RunPlatformUnitTests.include:412: note: Started tests for architectures 'i386' /Developer/Tools/RunPlatformUnitTests.include:419: note: Running tests for architecture 'i386' (GC OFF) objc[50676]: GC: forcing GC OFF because OBJC_DISABLE_GC is set Test Suite '/Users/chris/Projects/Mac/Cioccolata/build/Debug/Test.octest(Tests)' started at 2010-05-21 12:53:00 +1000 Test Suite 'CTRequestTest' started at 2010-05-21 12:53:00 +1000 Test Case '-[CTRequestTest testNothing]' started. /Developer/Tools/RunPlatformUnitTests.include: line 415: 50676 Bus error "${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}" /Developer/Tools/RunPlatformUnitTests.include:451: error: Test rig '/Developer/Tools/otest' exited abnormally with code 138 (it may have crashed). Command /bin/sh failed with exit code 1

我的测试方法只是分配并随后发布我创建的一个 HelloWorld 类,以帮助调试此设置:

如果我将这些代码行替换STAssertTrue(YES, @"Testing nothing");为错误消失,即使该类仍在导入中。

0 投票
1 回答
975 浏览

objective-c - 运行单个测试方法

使用 OCUnit 和 Xcode,有没有办法只运行一个测试?

理想情况下,我只能运行一种测试方法,但如果有一种方法可以只运行一个测试用例,那也可以。

我目前正在做的是运行“测试”任务来运行我的所有测试,但这会占用大量时间,理想情况下可以花在做其他事情上。

0 投票
2 回答
202 浏览

unit-testing - 编译失败时阻止 OCUnit 测试运行

我正在使用 Xcode 3.2.2 和内置的 OCUnit 测试工具。我遇到的一个问题是,每次我进行构建时,我的单元测试都会运行,即使构建失败。假设我在其中一个测试中犯了语法错误。测试编译失败,运行最后一次成功编译的单元测试。如果依赖目标之一无法构建,也会发生同样的事情 - 测试仍在运行。这显然不是我想要的。

如果构建失败,如何防止测试运行?如果这是不可能的,那么我宁愿让测试永远不会自动运行,这可能吗?抱歉,如果这很明显,我是 Xcode 菜鸟。我应该使用更好的单元测试框架吗?

0 投票
2 回答
1607 浏览

iphone - iPhone 上的 ocunit 测试

我正试图让 ocunit 从 XCode 在我的项目中工作。因为我还需要在单元测试中进行调试,所以我使用了一个自动化设置的脚本(见下文)。我只是将它包含在资源下的项目中,并将名称更改为我希望它运行的 .ocunit 文件。

我得到的问题是它找不到捆绑文件,因此存在错误。任何对 XCode 和 Objective-c 有所了解的人都可以看看它并告诉我出了什么问题。另外我应该如何生成我需要运行的 .ocunit 文件。通过为 iPhone 设置新的单元测试目标并向其添加测试?

希望有人知道,因为我刚刚开始进行 iPhone 开发,需要快速启动并运行

苹果脚本