问题标签 [xctest]

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 投票
3 回答
4410 浏览

ios - XCTest 如何执行 segue 呈现模态视图并测试presentedViewController

我试图测试一个可以呈现视图控制器的 segue。但是,总是失败。如何等待segue完成?请协助。

0 投票
2 回答
3156 浏览

ios - 在 iOS 单元测试中模拟 NSHTTPURLRequest 和 NSHTTPURLResponse

我正在iOS中开发一个对服务器进行HTTP调用的框架。我想编写单元测试来测试API。我想模拟服务器调用,而不是实际进行真正的服务器调用。任何人都可以帮助我进行示例单元测试进行模拟服务器调用。我们如何设置期望并返回手工构建的 url 响应。我使用 XCTest 框架进行单元测试,使用 OCMock 模拟对象。

0 投票
1 回答
790 浏览

objective-c - OCMockObserver:观察到意外通知

通知管理器.h

通知管理器.m

单元测试:

我得到错误:

OCMockObserver:观察到意外通知:NSConcreteNotification 0xfbbad70 {name = TestNotification; userInfo = { TestData = "一些数据"; }}

如果我发布没有 userInfo 对象的通知(只是 nil),则测试有效。有人可以解释为什么吗?

0 投票
1 回答
1362 浏览

objective-c - 数组速记表达式和方法调用的 XCTAssert 语法错误

所以我正在使用 XCTest 进行单元测试,并且遇到了一个小问题。

当我编写带有速记数组声明和方法调用的 XCTAssert 语句时,Xcode 中会出现语法错误:

在 Xcode 编译错误中:

但是,如果我在表达式周围添加更多括号,它将起作用:

这与我的某些语法不允许传递给宏有关吗?(假设 XCTAssert 是一个宏)

0 投票
2 回答
1028 浏览

objective-c - XCTest 测试方法中的 KVO addObserver 逻辑崩溃

我在结合 XCTest 使用键值观察逻辑时遇到了一些困难(原始代码正在通过测试覆盖率进行改造)。该逻辑在正常(非测试)上下文中运行良好,但每次在测试上下文中都会出现异常。

逻辑的要点是——我有两个类,分别称为 Service 和 Helper。脚手架的实现是:

Helper 是 Service 中某个属性的观察者。在我的正常运行时逻辑的上下文中,我通过调用 Service 实例方法来做到这一点addSvcObserver

服务.m:

Helper 遵循 KVO 观察模式,因此:

助手.m:

非常直截了当,我不会进入监视属性更改的逻辑,因为问题发生在此之前 - 如果我有如下代码摘录:

在非测试用例中没有问题(即,这个和相关的 KVO 逻辑按预期工作)。但是,addSvcObserver在 XCTest 测试方法的上下文中执行调用时会立即产生拒绝访问异常。我已经包含了一个异常“全部中断”断点——问题似乎发生objc_registerClassPairaddObserver:forKeyPath:options:context:。测试目标明确禁用了 ARC,因为它提供测试覆盖的项目(目标是 iOS7)由于遗留原因是非 ARC;这似乎不会对其他测试造成任何问题。

想法?

0 投票
0 回答
149 浏览

objective-c - 在 Xcode 中扩展 XCTestCase 类

在为我当前的 Objective-C 项目编写测试用例时,我注意到我的测试用例的子集 A 中有很多常见的功能和类变量。因此,我想将 XCTestCase 类子类化一次,让我们调用新类 ExtendedXCTestCase,并让该类包含所有提到的类变量和常用方法,然后简单地让子集 A 每个子类为 ExtendedXCTestCase 类,以允许无需重复代码即可访问常用方法和变量。

虽然这显然比看起来更难,因为我不断得到

如果创建一个新的测试目标,然后在该目标内创建 ExtendedXCTestCase 类,然后创建一个新的测试类,它是 ExtendedXCTestCase 的子类而不是 XCTestCase,即使没有向生成的两个添加任何代码,也足以导致问题文件,除了 ExtendedXCTestCase 导入(通过 Xcode 创建时)。

我试着在伟大的互联网上搜索了一段时间,但一点运气都没有。

一个简单的解决方法是创建一个包含公共变量和方法的实用程序类,并简单地让每个测试用例子类化 XCTestCase,然后只使用该对象。但是我希望能够继承 XCTestCase,这是不可能的,还是我错过了一些重要的东西?

任何帮助表示赞赏,在此先感谢。

新目标的完整错误记录如下:

ld /Users/Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build/Products/Debug/TODO\ Tests.xctest/Contents/MacOS/TODO\ 测试正常 x86_64
cd /Users/Arni/Desktop/TODO_List_project/TODO_List
setenv MACOSX_DEPLOYMENT_TARGET 10.9
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -bundle -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ MacOSX10.9.sdk -L/Users/Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build/Products/Debug -F/Users/Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build/ Products/Debug -F/Applications/Xcode.app/Contents/Developer/Library/Frameworks -F/Applications/Xcode.app/Contents/Developer/Library/Frameworks -filelist /Users/Arni/Library/Developer/Xcode/DerivedData/ TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build/Intermediates/TODO_List.build/Debug/TODO\Tests.build/Objects-normal/x86_64/TODO\Tests.LinkFileList-mmacosx-version-min=10。9 -bundle_loader /Users/Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build/Products/Debug/TODO_List.app/Contents/MacOS/TODO_List -framework XCTest -fobjc-arc -fobjc-link-runtime -framework XCTest -Xlinker -dependency_info -Xlinker /Users/Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build/Intermediates/TODO_List.build/Debug/TODO\Tests.build/Objects-normal/x86_64/TODO\Tests_dependency_info。 dat -o /Users/Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build/Products/Debug/TODO\Tests.xctest/Contents/MacOS/TODO\Testsapp/Contents/MacOS/TODO_List -framework XCTest -fobjc-arc -fobjc-link-runtime -framework XCTest -Xlinker -dependency_info -Xlinker /Users/Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build/Intermediates/ TODO_List.build/Debug/TODO\ Tests.build/Objects-normal/x86_64/TODO\ Tests_dependency_info.dat -o /Users/Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build/Products/Debug/TODO\ Tests.xctest/Contents/MacOS/TODO\ 测试app/Contents/MacOS/TODO_List -framework XCTest -fobjc-arc -fobjc-link-runtime -framework XCTest -Xlinker -dependency_info -Xlinker /Users/Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build/Intermediates/ TODO_List.build/Debug/TODO\ Tests.build/Objects-normal/x86_64/TODO\ Tests_dependency_info.dat -o /Users/Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build/Products/Debug/TODO\ Tests.xctest/Contents/MacOS/TODO\ 测试

重复符号 _OBJC_CLASS_$_TODOExtendedXCTestCase 在:
/Users/Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build /Intermediates/TODO_List.build/Debug/TODO Tests.build/Objects-normal/x86_64/TestTODOItem.o
/Users /Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build /Intermediates/TODO_List.build/Debug/TODO Tests.build/Objects-normal/x86_64/TODOExtendedXCTestCase.o 重复符号_OBJC_METACLASS_$_TODOExtendedXCTestCase in:
/Users/Arni /Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build /Intermediates/TODO_List.build/Debug/TODO Tests.build/Objects-normal/x86_64/TestTODOItem.o
/Users/Arni/Library/Developer/Xcode/DerivedData/TODO_List-fcuqkpfqvjdtiscxnapifzxzbgrq/Build /Intermediates/TODO_List.build/Debug/TODO Tests.build/Objects-normal/x86_64 /TODOExtendedXCTestCase.o ld:架构x86_64 clang
的2个重复符号
:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

0 投票
1 回答
1308 浏览

ios - iOS 中的 DBL_EPSILON 问题

我正在使用这个 -

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )我的项目中的宏。

我已经在项目的 .pch 文件中声明了这个宏

它在目标是我的项目时起作用,但在我尝试使用 xctest 运行测试用例时不起作用。

构建总是因以下错误而失败 - undeclared identifier 'DBL_EPSILON'

我已经在我的 appName.pch 中声明了这一点,并将该 .pch 导入我的文本案例包 .pch

当我导入#import <float.h>.

这解决了我的问题。我的问题为什么在测试包中需要这个导入?因为在主项目中不需要它。

0 投票
5 回答
20317 浏览

xcode - 在没有继续运行测试但没有停止其他测试的情况下使用断言失败 XCTestCase

我正在尝试使用 XCTest 框架测试我的应用程序。

如果某些逻辑条件成立(使用断言),我希望我的单个测试用例失败。我不希望测试用例中的其余代码运行,因为这可能会导致问题(例如访问空指针)我还希望测试用例的其余部分正常运行,而只是失败的测试被标记为失败。

我注意到 XCTestCase 有一个名为 continueAfterFailure 的属性。但是,将其设置为 YES 会导致失败的测试在断言之后继续执行行,并将其设置为 NO 会导致其余测试根本不运行。

这个问题有解决方案吗?

0 投票
2 回答
4042 浏览

ios - 如何在 ios XCTestCase 中对两个对象不相等进行单元测试

我对单元测试相当陌生,尤其是在 iOS 中

我有一个测试用例,如果我看到两个对象不相等,它应该会成功

除了在检查它们是否相等时要求测试失败之外,我找不到给我的方法。

我不希望对不相等的对象进行测试失败,

如果对象不相等,我希望测试成功。

哪种方法可以做到这一点?

这是我的测试方法:

}

0 投票
2 回答
2781 浏览

ios - iOS 测试:dispatch_once 被调用两次。应用第一,测试第二。观察者的问题

我有一个将在应用程序委托中创建的单点类。

当我运行 XCTTests 时,它会第二次创建。

这导致了两种不同的情况。如果我只是将它用于单元测试,这没问题。但是在集成测试中,当我为 urlSchmemeManager 注册一个观察者时,我得到一个 EXC_BAD_ACCESS,因为它已经被 rootViewController(在 UI 中)观察到了。

在 RootViewController 中:

有谁知道我该如何解决这个问题?