- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在异步测试中,至少对我来说,必须知道期望的实现计数才能知道如何断言是很常见的。
例如,一个测试来检查这个场景:
func testOne() {
let expectData = expectation(description: "data")
expectData.expectedFulfillmentCount = 2
var expectDataFulfillmentCount = 0
sut.data = {
expectData.fulfill()
expectDataFulfillmentCount += 1
if expectDataFulfillmentCount == 1 {
XCTAssertEqual(sut.numberOfItems, 3)
sut.fetchNextPage()
} else if expectDataFulfillmentCount == 2 {
XCTAssertEqual(sut.numberOfItems, 6)
}
}
sut.fetch()
waitForExpectations(timeout: 0.1, handler: nil)
}
我对这种模式不满意。我知道我可以在有期望时稍微改变我的断言方式,这样:
func testTwo() {
let expectFirstData = expectation(description: "firstData")
let expectSecondData = expectation(description: "secondData")
sut.data = {
if sut.numberOfItems == 3 {
expectFirstData.fulfill()
sut.fetchNextPage()
} else if sut.numberOfItems == 6 {
expectSecondData.fulfill()
}
}
sut.fetch()
wait(for: [expectFirstData, expectSecondData], timeout: 0.1, enforceOrder: true)
}
但是我也不喜欢这个,因为我没有断言(没有
XCTAssert
),我只是在满足期望,然后失去了轻松确定测试失败的原因和位置的能力。但是,这种模式非常适合对 bool 值的期望,例如:
func testThree() {
let truePerformingOperationExpect = expectation(description: "truePerformingOperationExpect")
let falsePerformingOperationExpect = expectation(description: "falsePerformingOperationExpect")
sut.performingOperation = { fetching in
if fetching {
truePerformingOperationExpect.fulfill()
} else {
falsePerformingOperationExpect.fulfill()
}
}
sut.fetch()
wait(for: [truePerformingOperationExpect, falsePerformingOperationExpect], timeout: 0.1, enforceOrder: true)
}
对我来说,如果我能得到期望的当前实现计数,这可以很容易地解决,它会清理测试很多,我会拥有两个最好的世界。是否可以?有没有其他方法可以做到这一点?
最佳答案
我最终继承了 XCTestExpectation
:
class CountedFulfillmentTestExpectation: XCTestExpectation {
private(set) var currentFulfillmentCount: Int = 0
override func fulfill() {
currentFulfillmentCount += 1
super.fulfill()
}
}
关于ios - 如何知道 XCTestExpectation 当前履行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63030545/
我正在尝试测试将运行多次的异步代码,并尝试为模拟的用户输入提前创建单独的期望。我正在尝试使用一个结构,该结构将位于一个数组中,然后异步函数和主测试函数都可以访问该结构。 虽然下面的代码会产生一个我以前
我在 Xcode 6 (Beta 5) 中使用 XCTestExpectations 进行异步测试。每次我运行它们时,我所有的异步测试都会单独通过。然而,当我尝试运行我的整个套件时,一些测试没有通过,
我正在使用Xcode 6的新异步测试功能。当异步任务在超时之前结束时,一切工作正常。但是,如果任务花费的时间超过超时时间,事情就会变得更加复杂。 这是我进行测试的方式: @interface Asyn
有 2 个选项如何初始化 XCTestExpectation。首先,使用直接初始化程序。 import XCTest class MyTests: XCTestCase { let expec
我编写了一个测试来检查某些值是否会在 5 秒内降为零。每隔一秒 NSTimer 都会触发一个将此值减一的方法。 看起来像这样: let foo = SomeObject(initWithTim
在异步测试中,至少对我来说,必须知道期望的实现计数才能知道如何断言是很常见的。 例如,一个测试来检查这个场景: 获取数据 收到第一个回调后,断言项目是否符合预期 获取下一页项目 断言项目是否符合预期
考虑以下单元测试: - (void)testSample { XCTestExpectation *expectation = [self expectationWithDescription
我正在用 Swift 编写一个 XCTest 单元测试。这个想法是在特定情况下不得调用回调。 所以我做的是 func testThatCallbackIsNotFired() { let ex
我有三个异步测试。在 Xcode 中测试时一切都运行良好,但测试用例无法使用 xcodebuild 构建。我收到 11 个构建错误,全部与 XCTestExpectation 相关。 示例: erro
我有一个 MyService 类继承了 NSThread: 标题: @interface MyService : NSThread { -(void) startMe; -(void) doT
我有许多异步单元测试,它们使用期望独立运行。然而,当我运行套装中的所有测试时,它们不会等待彼此完成——当下一个测试开始运行时,异步回调仍处于挂起状态。我想要的是每个测试都等待上一个测试中的期望再运行。
我在很多测试中都使用了 XCTestExpectation,有时(非常随机地)一些期望没有实现(尽管我确信它们应该是)。 在调查这个问题时,我注意到一些期望在主线程中实现,而一些在后台线程中实现。到目
我正在用 swifts 编写单元测试,并测试一个独特的工作流程。 在 methodA() 中,我使用异步方法错误地加载了一个对象(比如使用不正确的凭据)。也掀起一个期待 func method
我想确保在一种特定情况下不会发送某个 NSNotification。有没有使用 XCTestCase 实现此目的的简单方法? 最佳答案 创建一个辅助方法来订阅 NSNotification。收到后,设
我正在用 Swift 编写我的第一个集成测试。 我正在尝试检查特定 url 中是否存在图像。 我想执行一个头部请求并检查响应的状态码。 我不断收到错误: Terminating app due to
我正在尝试编写单元测试,我希望我的测试用例等待某个类中的变量发生变化。因此,我创建了一个带有谓词的期望值,并使用 XCTWaiter().wait(for: [expectation], timeou
我是一名优秀的程序员,十分优秀!