我在swift上使用Xcode,默认情况下它会创建一个引用XCTest的测试文件.
当我将目标成员资格设置为我的主项目时,会导致此错误
无法为XCTest加载基础模块
如果未设置此目标成员资格,则测试运行正常,一切正常.
PS:我是swift的新手,这可能是一个愚蠢的问题(请赐教)
我最近更新到Xcode 7 beta 5.我尝试在早期项目中添加单元测试,但是我收到错误消息"没有这样的模块[myModuleName]"就@testable import myModuleName
行了.
我试过了
这项工作都没有用(但我已经在另一个项目中进行了测试).还有其他人有这个问题并解决了吗?
在过去的几天里,我一直用头撞墙,但尽管有多次Google/SO/Github搜索,我找不到解决我遇到的问题的方法!
我要做的就是为我的应用程序创建一些使用Firebase pod的单元测试.
我正在使用Xcode 7.3.1和Cocoapods 1.0.1.更新:问题仍然存在于Xcode 8.0中
使用此podfile:
platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
target 'MyApp' do
pod 'Firebase'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
target 'MyAppTests' do
inherit! :search_paths
end
end
Run Code Online (Sandbox Code Playgroud)
在我的XCTest课程中,我得到了
缺少必需的模块'Firebase'
错误 @testable import MyApp
或者使用此podfile:
platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
def common_pods
pod 'SwiftyTimer'
pod 'Firebase'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
end
target 'MyApp' do
common_pods
end
target 'MyAppTests' do
common_pods
end
Run Code Online (Sandbox Code Playgroud)
测试构建但我的控制台上到处都是警告,例如:
类<-FirebaseClassName->在...中实现... MyApp ...和... MyAppTests ...将使用其中一个.哪一个未定义
我有一些项目我正在尝试使用Xcode 6 Beta 2.这些项目都有一些类型的库使用XCTest(Kiwi/XCTest和Specta)而不是在Xcode 6中构建,因为XCTest/XCTest.h不能被发现.
fatal error: 'XCTest/XCTest.h' file not found
#import <XCTest/XCTest.h>
Run Code Online (Sandbox Code Playgroud)
我注意到XCTest.framework不再出现在"带有二进制文件的链接库"构建阶段列表中,但这很好,因为当我使用Xcode 6 创建一个新项目时,看起来库是自动链接的.
也许是一些相关性,我的XCTest需要的依赖关系都是通过Cocoapods引入的.
有什么我不知道我需要用我的项目更新吗?
我正在尝试使用TDD和新的XCTest框架编写iOS应用程序.我的一个方法从Internet检索文件(给定NSURL对象)并将其存储在用户的文档中.该方法的签名类似于:
- (void) fetchAndStoreImage:(NSURL *)imageUrl
Run Code Online (Sandbox Code Playgroud)
我正在尝试为这种方法编写测试,如果没有连接到互联网就不会失败.我的方法(取自上一个问题)是使用NSURL将方法调用到本地文件系统中的图像.
当创建启用了单元测试的新项目时,Tests目录有一个名为"Supporting Files"的子目录.我想这是我的测试图像应该去的地方.我的问题是如何获得指向此目录中的图像的NSURL对象,因为我不希望测试图像与应用程序捆绑在一起.任何帮助表示赞赏.
在一个新项目中,我有这个简单的测试
#import <XCTest/XCTest.h>
#import "ViewController.h"
@interface ViewControllerTests : XCTestCase
@end
@implementation ViewControllerTests
- (void)testExample
{
// Using a class that is not in the test target.
ViewController * viewController = [[ViewController alloc] init];
XCTAssertNotNil(viewController, @"");
}
@end
Run Code Online (Sandbox Code Playgroud)
ViewController.h 不是测试目标的一部分,但它编译并运行测试没有任何问题.
我认为这是因为应用程序首先构建(作为依赖)然后是测试.链接器然后找出ViewController类是什么.
但是,在较旧的项目中,使用完全相同的测试和ViewController文件,构建在链接器阶段失败:
Run Code Online (Sandbox Code Playgroud)Undefined symbols for architecture i386: "_OBJC_CLASS_$_ViewController", referenced from: objc-class-ref in ViewControllerTests.o
即使创建了新的XCTest单元测试目标,也会发生此链接器错误.
为了解决这个问题,可以在应用程序和测试目标中包含源(勾选上图中的两个框).这会在模拟器的系统日志中导致重复符号的构建警告(打开模拟器并按cmd- /查看):
Run Code Online (Sandbox Code Playgroud)Class ViewController is implemented in both [...]/iPhone Simulator/ [...] /MyApp.app/MyApp and [...]/Debug-iphonesimulator/LogicTests.octest/LogicTests. One of the two will be used. Which one is undefined.
这些警告偶尔会导致以下示例说明的问题: …
在XCode 6.1中运行测试时,一个令人讨厌的事情是整个应用程序必须运行并启动其storyboard和root viewController.在我的应用程序中,它运行一些获取API数据的服务器调用.但是,我不希望应用程序在运行其测试时执行此操作.
随着预处理器宏的消失,对于我的项目来说最好的是要知道它是在运行测试而不是普通的启动时启动的吗?我用CMD + U和机器人正常运行它们.
伪代码将是:
// Appdelegate.swift
if runningTests() {
return
} else {
// do ordinary api calls
}
Run Code Online (Sandbox Code Playgroud) 我添加了一个简单的单元测试来测试我的字符串扩展.但它失败了.我在这里做错了什么?
据我所知XCTAssertEqual
,测试价值而不是对象本身?
第三行顺便说一句,字符串是相同的,但XCTAssertEqual
他们说不是.
- (void) testInitialsFromFullname {
NSString *firstNickName = @"Mike Kain";
NSString *expectedResult = @"MK";
NSLog(@"Equal:%@", [[firstNickName initialsFromString] isEqualToString:expectedResult] ? @"YES" : @"NO");
XCTAssertEqual(expectedResult, [firstNickName initialsFromString], @"Strings are not equal %@ %@", expectedResult, [firstNickName initialsFromString]);
}
Run Code Online (Sandbox Code Playgroud) 我是否可以在XCTest中调用API调用setUP()或tearDown()以在测试之间重置应用程序?我查看了XCUIApplication的点语法,我看到的只是.launch()
或者有没有办法在Swift中调用shell脚本?然后我可以调用xcrun中间的测试方法来重置模拟器.
我正在使用新的Xcode 7 UI测试功能编写UI测试用例.在我的应用程序的某些时刻,我要求用户允许相机访问和推送通知.因此会出现两个iOS弹出窗口:"MyApp Would Like to Access the Camera"
弹出窗口和"MyApp Would Like to Send You Notifications"
弹出窗口.我希望我的测试可以解雇两个弹出窗口.
UI录制为我生成了以下代码:
[app.alerts[@"cameraAccessTitle"].collectionViews.buttons[@"OK"] tap];
Run Code Online (Sandbox Code Playgroud)
但是,[app.alerts[@"cameraAccessTitle"] exists]
解析为false,上面的代码生成错误:Assertion Failure: UI Testing Failure - Failure getting refresh snapshot Error Domain=XCTestManagerErrorDomain Code=13 "Error copying attributes -25202"
.
那么在测试中解除一堆系统警报的最佳方法是什么?系统弹出窗口会中断我的应用程序流并立即使我的正常UI测试用例失败.事实上,任何有关如何绕过系统警报以便我可以恢复测试通常流程的建议都表示赞赏.
这个问题可能与这个SO帖子有关,也没有答案:Xcode7 | Xcode UI测试| 如何处理位置服务警报?
提前致谢.
xctest ×10
ios ×7
xcode ×6
unit-testing ×4
objective-c ×3
swift ×3
cocoapods ×2
xcode7 ×2
nsbundle ×1
tdd ×1