【发布时间】:2020-04-07 01:47:55
【问题描述】:
有些事想我很久了。假设我们已经编写了测试类:
final class BearerTokenManagerTests: XCTestCase {
private var bearerTokenManager: BearerTokenManager!
private var bearerTokenProvider: BearerTokenProvider!
private var stubKeyValueStore: KeyValueStoreDummyStub!
private var scheduler: TestScheduler!
private var disposeBag: DisposeBag!
override func setUp() {
super.setUp()
stubKeyValueStore = KeyValueStoreDummyStub()
bearerTokenProvider = BearerTokenProvider(keyValueStore: stubKeyValueStore)
bearerTokenManager = BearerTokenManager(bearerTokenProvider: bearerTokenProvider)
scheduler = TestScheduler(initialClock: 0)
disposeBag = DisposeBag()
}
override func tearDown() {
stubKeyValueStore = nil
bearerTokenProvider = nil
bearerTokenManager = nil
scheduler = nil
disposeBag = nil
super.tearDown()
}
func test_bearerToken_observeChanges() {
let bearerToken = scheduler.createObserver(BearerTokenManagerType.BearerToken.self)
bearerTokenManager.bearerToken
.bind(to: bearerToken)
.disposed(by: disposeBag)
scheduler.start()
// every update should be saved in key value store
bearerTokenManager.update(bearerToken: "123")
XCTAssertEqual(stubKeyValueStore.string(forKey: "BearerToken"), "123")
bearerTokenManager.update(bearerToken: "456")
XCTAssertEqual(stubKeyValueStore.string(forKey: "BearerToken"), "456")
bearerTokenManager.update(bearerToken: "789")
XCTAssertEqual(stubKeyValueStore.string(forKey: "BearerToken"), "789")
// every udpate should be emited
XCTAssertEqual(bearerToken.events, [
.next(0, nil), // by default (on start) token equal to nil
.next(0, "123"),
.next(0, "456"),
.next(0, "789"),
])
}
}
tearDown 是否需要打扫卫生?
为什么我认为没有必要:
- 在每个下一个测试用例
setUp重置所有内容之前。 - 当
BearerTokenManagerTests中的测试结束时,所有东西都应该释放
为什么我不确定
- 假设“当
BearerTokenManagerTests中的测试结束时,一切都应该解除分配”可能是错误的 - 我担心
RxScheduler的副作用 - 我还不知道的事情
有人可以分享他们的经验吗?你清理tearDown中的东西吗?重置setUp 中的属性是否足够?
【问题讨论】:
-
基于主要意见,但在这种情况下,您可能根本不需要
tearDown();因为您没有为下一次运行做任何特殊的“重置”。
标签: swift xcode xctestcase rxtest