setUp() 方法在调用每个测试方法之前是如何调用的?
How is the setUp() method called before the invocation of each test method?
我正在阅读一本很棒的书,学习 Swift 中的测试驱动开发。我的最终目标是更好地理解 OOP 体系结构。在我阅读这本书时,前面的一节指出,setUp() 方法在我理解的每个测试方法执行对象设置之前触发,以 运行 测试通过或失败结果。我不确定的是,从架构的角度来看,这怎么可能? Apple 是如何制作一个 class 的方法,该方法在 class 中的所有其他方法之前被触发?
下面是一些示例代码:
import XCTest
@testable import FirstDemo
class FirstDemoTests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testExample() {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
}
}
}
我认为 XCTest
class 的生命周期就像 UIViewController
一样。
与 viewDidLoad()
在视图加载到内存时在 init(coder:)
之后调用相同,在加载测试 class 之后也会调用 setUp()
方法(一次在对象的寿命)。
您还可以在 github:
上调查本机和第三方测试框架源代码
您正在子类化一个名为 XCTestCase 的 Class。通常,Testframework 内省 Class es,其中定义了 Test-Methods 并且 运行 它们以特定的顺序排列。
无论如何,我不能 100% 确定 XCTest 是否以这种方式工作,但您可以尝试查看源代码并尝试深入挖掘:
对于每个要测试的测试:调用setup()
,然后是实际测试,然后是teardown()
。
然后再次从 class 设置 另一个 测试并再次拆卸...直到您的测试 class 的所有**测试得到 运行.
行的顺序不会影响先调用哪个测试。
之所以这样做是因为 2 个测试应该是 100% 独立的。你不希望 testExample 对你正在执行测试的 object/sut/system_under_test 做一些事情(改变它的状态)但是,不是撤消已完成的操作。否则你的 testPerformanceExample 将从你不是的状态加载
期待。
我正在阅读一本很棒的书,学习 Swift 中的测试驱动开发。我的最终目标是更好地理解 OOP 体系结构。在我阅读这本书时,前面的一节指出,setUp() 方法在我理解的每个测试方法执行对象设置之前触发,以 运行 测试通过或失败结果。我不确定的是,从架构的角度来看,这怎么可能? Apple 是如何制作一个 class 的方法,该方法在 class 中的所有其他方法之前被触发?
下面是一些示例代码:
import XCTest
@testable import FirstDemo
class FirstDemoTests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testExample() {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
}
}
}
我认为 XCTest
class 的生命周期就像 UIViewController
一样。
与 viewDidLoad()
在视图加载到内存时在 init(coder:)
之后调用相同,在加载测试 class 之后也会调用 setUp()
方法(一次在对象的寿命)。
您还可以在 github:
上调查本机和第三方测试框架源代码您正在子类化一个名为 XCTestCase 的 Class。通常,Testframework 内省 Class es,其中定义了 Test-Methods 并且 运行 它们以特定的顺序排列。
无论如何,我不能 100% 确定 XCTest 是否以这种方式工作,但您可以尝试查看源代码并尝试深入挖掘:
对于每个要测试的测试:调用setup()
,然后是实际测试,然后是teardown()
。
然后再次从 class 设置 另一个 测试并再次拆卸...直到您的测试 class 的所有**测试得到 运行.
行的顺序不会影响先调用哪个测试。
之所以这样做是因为 2 个测试应该是 100% 独立的。你不希望 testExample 对你正在执行测试的 object/sut/system_under_test 做一些事情(改变它的状态)但是,不是撤消已完成的操作。否则你的 testPerformanceExample 将从你不是的状态加载 期待。