我的项目中有一个名为Meal.swift的类和一个单元测试
func testMealInitialization() {
// Success case.
let potentialItem = Meal(name: "Newest meal", photo: nil, rating: 5)
XCTAssertNotNil(potentialItem)
// Failure cases.
let noName = Meal(name: "", photo: nil, rating: 0)
XCTAssertNil(noName, "Empty name is invalid")
}
Run Code Online (Sandbox Code Playgroud)
但问题是:使用未解析的标识符"Meal"
我刚刚学习了Xcode中的单元测试.现在我正在尝试Xcode 7,当我创建一个新项目时,我看到有一个新的UI测试组.
我观看了WWDC 2015视频并且它非常好,但你有一个超级简单的例子,我可以自己完成吗?视频示例对我来说有点过于复杂.
笔记
我试图在我的遗留Objc代码中测试一些Swift类(@objc类).我在我的测试类中导入"UnitTests-Swift.h".
然后我收到这个错误:
在自动生成的"UnitTests-Swift.h"中找不到模块"MyApp"
这是"UnitTests-Swift.h"顶部的内容
typedef int swift_int3 __attribute__((__ext_vector_type__(3)));
typedef int swift_int4 __attribute__((__ext_vector_type__(4)));
#if defined(__has_feature) && __has_feature(modules)
@import XCTest;
@import ObjectiveC;
@import MyApp;
@import CoreData;
#endif
Run Code Online (Sandbox Code Playgroud)
我清理了项目,检查了所有相关的标志(在Xcode单元测试中使用@testable时没有这样的模块,不能在Objective-C中使用Swift类),删除派生数据等等.不知道发生了什么,但我很确定@import MyApp不应该在那里..
谁能帮我这个?
这是我的简单测试用例:
import XCTest
@testable import MyApp //it doesn't work
Run Code Online (Sandbox Code Playgroud)
因为这:
class TabBarControllerTests: XCTestCase {
override func setUp() {
super.setUp()
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject([], forKey: DBTabBarOrderedIndexesKey) //key is undefined, because of lack of my app module
defaults.synchronize()
continueAfterFailure = false
XCUIApplication().launch()
}
func testIsOrderOfTabsSaved() {
XCUIApplication().tabBars.buttons["Catering"].tap()
//what next?
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我点击UITabBarItem我改变了值DBAppSettings.mode,所以在这里我想访问我的DBAppSettings.mode属性来检查它是否真的改变了.
我注意到有一个奇怪的事情,当我构建我的应用程序,并检查构建的内容时,我的UITest目标没有构建.那很重要么?
我从来没有使用过单元测试,我理解它的用途,但我真的不知道何时以及如何使用它.
我想知道什么时候使用单元测试是值得的,也许有一些例子.
在我的iOS应用程序,我想区分的环境,使网络API调用适当的环境(Development,Staging和Production).
为此我创建了一个configuration.plist文件,其中包含每个环境的不同端点,并且:
Debug配置并调用它Development Build.Development(复制Debug方案)的新Scheme,并在Info选项卡(Runsection)中选择了Development Build
配置.当我在调试模式下运行时,一切正常运行.
我正在使用可可豆荚.
如果我选择Development方案,我会得到一个No such module 'JazzHands'
如果我编辑该Development方案以使用该Debug构建,它工作正常.
所以我一定要错过一些不能工作的东西.
我有一个混合的 Objective-c 和 Swift 项目,我尝试为它编写单元测试。我的项目名称是:Alphaproject 我的产品模块名称是:Alphaproject 我在我的主要目标(Alphaproject)中设置为 YES 定义模块,并设置为 YES EnableTestability for Debug only in this same Target。
在我的 Test 类中,我尝试导入我的产品模块名称:
@testable 导入 Alphaproject
补充说明:
还有其他想法吗?
ios ×6
xcode ×6
swift ×3
iphone ×2
objective-c ×2
unit-testing ×2
xcode7 ×2
compilation ×1
import ×1
swift2 ×1
swift3 ×1
ui-testing ×1
xcode6 ×1