我是使用XCTest框架进行快速自动化测试的新手。 在我的工作中,我面对正确安排测试中的一些代码部分 请解释在类的开头和特定函数中变量声明之间的区别。哪种方式更受欢迎?
Var.1
class someClass: XCTestCase {
func someFunc {
let app = XCUIApplication()
print (app.debugdescription)
}
}
无功。 2
future map(r => println(r)) recover {
case arithmeticException => log("arithmetic exception")
case NonFatal(e) => log(e)
}
答案 0 :(得分:2)
<强>无功。 1 使您能够在XCUIApplication
中配置setup()
并在测试中使用它。像这样:
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)
}
}
答案 1 :(得分:2)
两种方式均可行,但 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)
}
}
答案 2 :(得分:1)
变量声明为类级别或函数级别与其他编程语言相同,因此如果您了解它们的基本原理会很好。
类级别变量意味着可以在整个类中访问此变量,这意味着它可以在同一个类的任何函数中使用。这也意味着如果您将类设置为public,并将该变量设置为public,那么一旦初始化了类,就可以在其他类的程序中访问它。 通常如果你没有正确管理它们就会产生内存问题,因为当类本身在内存中时它们会留在内存中。
功能级变量只能在该特定功能中访问,不能在该功能之外访问,无论它是同一个类还是不同的类,它们在其功能之外没有引用。 通常它们不会在整个程序中产生内存问题,因为这些变量会在完全执行该函数时离开内存。