测试已测试 | ✗ |
Lang语言 | SwiftSwift |
许可 | MIT |
Published最新版本 | 2017年3月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Mattias Eriksson 维护。
上下文 XCode UI 测试框架
pod 'BananaPeel'
在我关于框架总体的想法的 博客 上了解更多。
扩展您应用中每个视图的 BananaPeel
类以创建独特的上下文,便于测试和维护。
extension LoginViewPeel: BananaPeel {
override func viewDidAppear() -> Self {
return self.assert {
XCTAssertTrue(self.navigationBars["Login"].isVisible)
}
}
func tapOnLoginButton() -> LoggedInViewPeel {
return self.tap {
$0.buttons["Login"]
}
.peel(on: LoggedInViewPeel.self)
}
}
extension LoggedInViewPeel: BananaPeel {
override func viewDidAppear() -> Self {
return self.assert {
XCTAssertTrue(self.navigationBars["Logged In"].isVisible)
}
}
func tapOnLogoutButton() -> LoginViewPeel {
return self.tap {
$0.buttons["Logout"]
}
.peel(on: LoginViewPeel.self)
}
}
现在您可以这样编写测试
func testLogin() {
Banana()
.addLaunchEnvironment(key: "isLoggedIn", value: "false")
.peel(on: LoginViewPeel.self)
.tapOnLoginButton()
.peelOff()
}
func testLogout() {
Banana()
.addLaunchEnvironment(key: "isLoggedIn", value: "true")
.peel(on: LoggedInViewPeel.self)
.tapOnLogoutButton()
.peelOff()
}
注意 您必须自己处理应用中的启动环境,以便将用户置于正确的状态。我计划扩展这个框架来提供辅助类来做这些。
init()
func addLaunchEnvironment(key: String, value: String) -> Self
func peel() -> BananaPeel
func peel<T: BananaPeel>(on peel: T.Type) -> BananaPeel
open func viewDidAppear() -> Self
open func viewDidDisappear() -> Self
func assert(closure: (XCUIApplication) -> ()) -> Self
func enter(text: String, into element: (XCUIApplication) -> (XCUIElement)) -> Self
func swipeDown(element: (XCUIApplication) -> (XCUIElement)) -> Self
func swipeLeft(element: (XCUIApplication) -> (XCUIElement)) -> Self
func swipeRight(element: (XCUIApplication) -> (XCUIElement)) -> Self
func swipeUp(element: (XCUIApplication) -> (XCUIElement)) -> Self
func tap(element: (XCUIApplication) -> (XCUIElement)) -> Self
func wait(_ time: UInt32 = 1) -> Self
func waitUntilVisible(timeout: TimeInterval = 5, element: (XCUIApplication) -> (XCUIElement)) -> Self
func waitUntilNotVisible(timeout: TimeInterval = 5, element: (XCUIApplication) -> (XCUIElement)) -> Self
func peel<T: BananaPeel>(on peel: T.Type) -> T
func peelOff()