Quick是一种行为驱动的开发测试框架.我想知道为什么这比定期XCTests更好.Nimble只是一个匹配库,但它使得测试很容易阅读,比如期望(13)> 9.
对我而言,Quick提供了一个新的词汇表来编写测试(XCTests没有),并使您专注于编写单元测试.基本上它是TDD的特征诱导路径.当测试失败时,它也更具描述性.
我注意到的另一件事是,如果我想看一个方法做什么,如果我去快速规范我可以很容易地阅读什么是被测试,然后了解更多关于方法而不是写方法的评论.因此,快速规范充当对方法的评论.
关于Quick或BDD还有什么我应该知道的吗?
我试图做一个简单的测试来看看 Quick 和 Nimble 是否正常工作,但它们没有。这是我应该打破的简单测试:
import Quick
import Nimble
class SomeSpec: QuickSpec {
override func spec() {
describe("bad test") {
it("does not pass") {
expect("good").to(equal("bad"))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但如果我运行测试,我会看到输出:
在 0.000 (0.004) 秒内执行了 0 次测试,其中 0 次失败(0 次意外)
我不知道为什么要进行零测试。我确实使用 Swift Package Manager 安装了 Quick 和 Nimble,而不是 Cocoapods,如果这可能是问题的原因的话。
我想在我的Quick/Nimble BDD测试中提出Moya存根请求.Moya有一个我使用JSON文件创建的参数:sampleData
var sampleData: Data {
switch self {
case .getPlaces:
// Provided that project have a file named get_places.json in it's bundle.
guard let path = Bundle.main.path(forResource: "get_places", ofType: "json"),
let data = Data(base64Encoded: path) else {
return Data()
}
return data
case .getPlaceDetail:
// Provided that project have a file named get_place_detail.json in it's bundle.
guard let path = Bundle.main.path(forResource: "get_place_detail", ofType: "json"),
let data = Data(base64Encoded: path) else {
return Data() …Run Code Online (Sandbox Code Playgroud) 我正在尝试为Swift 3创建一个CocoaPod.因为CocoaPods使用Nimble和Quick,而那些库还没有更新,我分配了repos并试图转换它们.
在Nimble项目中,有一个函数调用,签名为:
setTimer(start: DispatchTime, interval: UInt64, leeway: UInt64)
Run Code Online (Sandbox Code Playgroud)
编译说 Cannot invoke 'setTimer' with an argument list of type '(start: DispatchTime, interval: UInt64, leeway: UInt64)'
private let pollLeeway: UInt64 = NSEC_PER_MSEC
let interval = UInt64(pollInterval * Double(NSEC_PER_SEC))
asyncSource.setTimer(start: DispatchTime.now(), interval: interval, leeway: pollLeeway)
Run Code Online (Sandbox Code Playgroud)
自动完成显示所有setTimer方法都已弃用,但是从我发现它们不应该这样做.
有替代品吗?
我正在使用 Quick/Nimble 发出网络请求 (URLRequest) 来实现一个测试用例,但出现此错误:
*** Terminating app due to uncaught exception 'InvalidNimbleAPIUsage', reason: 'expect(...).toEventually(...) can only run on the main thread.'
Run Code Online (Sandbox Code Playgroud)
这是我的测试用例:
expect(someVar).toEventually(equal("bar"), timeout: 0.2, pollInterval: 0.1, description: "time")
Run Code Online (Sandbox Code Playgroud)
如果改变我的实现:
DispatchQueue.main.async {
expect(someVar).toEventually(equal("bar"), timeout: 0.2, pollInterval: 0.1, description: "time")
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
*** 由于未捕获的异常“InvalidNimbleAPIUsage”而终止应用程序,原因:“不允许嵌套异步期望以避免创建片状测试。
你们中的任何人都知道如何使用此测试用例来工作吗Quick/Nimble?
我非常感谢你的帮助
我写了一个包含beforeEach和的示例组的测试用例afterEach.我希望每个beforeEach和afterEach将每个调用一次it.
唉,单个it的beforeEach,并afterEach得到了多次调用.
我查看了一些文档(即Quick自己的文档和http://jasmine.github.io/2.1/introduction.html),但这些文档并没有帮助我.
这是一个小片段,演示了这一点:
class CheckerTests:QuickSpec {
override func spec() {
describe("something") {
beforeEach {
tLog.info("describe before")
}
afterEach {
tLog.info("describe after")
}
context("of something") {
beforeEach {
tLog.info("context before")
}
afterEach {
tLog.info("context after")
}
it("should behave like something") {
tLog.info("in the `IT`")
expect(true).to(beTrue())
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
我的控制台记录:
以上日志提出了两个问题:
beforeEach和afterEach现在被称为; 我也不知道为什么我会看到多个日志调用它们.为什么他们多次被召唤?- 上面的日志显示在示例通过之前 …
我在单元测试方面遇到问题。当我运行测试时,它最终以"No tests found". 我正在使用AppCode和Quick/Nimble框架进行单元测试,但它在 XCode 中也不起作用。
我已经XCTest/Kiwi使用“目标:MyAppTests”、“配置:开发”和“类:所有测试类”运行配置(即使指定了特定测试类,它也不起作用)。据我所知,没有什么更多的配置。
有什么想法我做错了吗?我不确定我应该提供什么其他类型的信息/配置..谢谢
编辑:示例单元测试代码
import Quick
import Nimble
@testable import FigurePOS
class DateFormatterTest: QuickSpec
{
override func spec()
{
describe("formatting dates") {
it("should print correct date") {
var c = DateComponents()
c.year = 2016
c.month = 5
c.day = 24
c.hour = 4
c.minute = 33
c.second = 12
let gregorian = NSCalendar(identifier: .gregorian)!
let date = gregorian.date(from: c)!
expect(DateFormatter.formatGmt(date)).to(equal("2016-05-24T04:33:12Z"))
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我在测试一个抛出异常的方法时让Nimble匹配器正确无误.根据文档,它应该很简单.我只需要这样的期望
expect( try somethingThatThrows() ).toNot( throwError() )
Run Code Online (Sandbox Code Playgroud)
但是对于Swift 3和Xcode 8.2,我得到了一个编译器编辑器.这是上下文.
describe("Using RealmDatasource") {
let datastore = RealmDatasource() as Datasource
it("can retrieve an object") {
expect( try datastore.getCurrentObject() ).to( throwError() )
}
}
Run Code Online (Sandbox Code Playgroud)
我在'it'声明行上收到以下错误
Run Code Online (Sandbox Code Playgroud)Invalid conversion from throwing function of type '() -> () throws to non-throwing function of type '() -> ()'
我试图找出描述和上下文之间的差异。但我有点困惑。因此任何人都可以阐明它们之间的差异以及它们各自的用例。
另外,我什么时候应该在测试用例中编写嵌套描述?
谢谢
我的项目是用 Swift 2.0 编写的,我使用 Quick & Nimble 来测试我的代码。
expect(workerSpy.buySharesQuantity).to(equal(0.9602))
Run Code Online (Sandbox Code Playgroud)
我得到的是带有错误消息的预期失败
expected to equal <0.9602>, got <0.9602>
Run Code Online (Sandbox Code Playgroud)
buySharesQuantity 的定义
var buySharesQuantity: Double = 0.0
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么?