我是使用XCTest框架进行快速自动化测试的新手。在我的工作中,我面临着正确的排列,测试中的一些代码,请解释变量声明在类的开头和在某些函数中的区别。哪种方式更好?
Var.1
class someClass: XCTestCase {
let app = XCUIApplication()
func someFunc {
print (app.debugdescription)
}
}Var。2
class someClass: XCTestCase {
func someFunc {
let app = XCUIApplication()
print (app.debugdescription)
}
}发布于 2016-05-04 08:05:33
变量声明为Class级或函数级与其他编程语言相同,所以如果您了解它们的基本原理,那就太好了。
类级变量意味着可以在整个类中访问该变量,这意味着它可以在同一个类的任何函数中使用。这也意味着,如果将类设置为公共类,将该变量设置为公共变量,那么一旦类初始化,就可以在其他类的程序中访问该类。通常,当类本身在内存中时,如果您不正确地管理它们,它们可能会产生内存问题。
函数级变量只能在该特定函数中访问,而不能在该函数之外访问,无论它是同一个类还是其他类,它们在函数之外没有引用。通常,它们不会在整个程序中创建内存问题,因为当函数完全执行时,这些变量会离开内存。
发布于 2016-05-04 07:42:36
Var.1使您能够在setup()中配置XCUIApplication并在测试中使用它。如下所示:
class someClass: XCTestCase {
var app: XCUIApplication!
func setUp {
app = XCUIApplication()
app.launchArguments.append("launchArgument")
setupSnapshot(app)
app.launch()
}
func test1 {
XCTAssertNotNil(app)
}
func test2 {
XCTAssertNotNil(app)
}
}与Var。2,您可以在每次测试中设置不同的应用程序。如下所示:
class someClass: XCTestCase {
func test1 {
let app = XCUIApplication()
app.launchArguments.append("withTestUser")
app.launch()
XCTAssertNotNil(app)
}
func test2 {
let app = XCUIApplication()
app.launchArguments.append("withNoData")
app.launch()
XCTAssertNotNil(app)
}
}发布于 2016-05-04 08:37:43
这两种方法都是可能的,但var 2是首选的。对于var 1解决方案,请考虑以下场景:
class State {
var val: Int = 0
}
class TestClass: XCTestCase {
let state = State()
func test1() {
state.val = 5
XCTAssertEqual(5, state.val)
}
func test2() {
XCTAssertEqual(0, state.val)
}
}这种方式的结果取决于哪个测试将首先运行。如果test2是第一个,那么这两个测试都会成功。另外,第二次测试将失败。
对于var 2解
class TestClass: XCTestCase {
func test1() {
let state = State()
state.val = 5
XCTAssertEqual(5, state.val)
}
func test2() {
let state = State()
XCTAssertEqual(0, state.val)
}
}无论哪个测试将首先运行,这两个测试都会成功。这使得var 2解决方案在大多数情况下都是首选的。
有一种情况是,var 1比var 2更方便,当SUT有许多依赖项时,您必须在每次测试中为它们复制和粘贴创建代码。然后可以将依赖项声明为类变量,但必须使用 setUp (可能还有tearDown)来确保在每次测试之前刷新它们的状态。
class TestClass: XCTestCase {
var dep1: Dependency1!
var dep2: Dependency2!
var sut: SUT!
func setUp() {
dep1 = Dependency1()
dep2 = Dependency2()
sut = SUT(dep1, dep2)
}
}https://stackoverflow.com/questions/37021159
复制相似问题