gpt4 book ai didi

swift - UITabBarController 中的测试方法正确设置标题

转载 作者:行者123 更新时间:2023-11-30 11:07:11 24 4
gpt4 key购买 nike

我目前正在尝试了解 Swift 4 中的单元测试。我有一个类,其中有一个设置我的 View Controller 的方法。

我想确保此方法正确设置 ViewController 上的标题。

但是我不明白如何编写这个测试?

这是我到目前为止的代码和测试。

目前我的测试失败了:

XCTAssertEqual failed: ("nil") is not equal to ("Optional("Favourites")") - 

如何测试这种行为?任何帮助将非常感激。

Controller

class MainTabBarController: UITabBarController {

override func viewDidLoad() {
super.viewDidLoad()

setupTabBar()
setupViewControllers()
}

// MARK:- Setup

fileprivate func setupViewControllers() {
viewControllers = [
generateNavigationController(with: UIViewController(), title: "Favourites", image: UIImage(imageLiteralResourceName: "favorites")),
generateNavigationController(with: UIViewController(), title: "Search", image: UIImage(imageLiteralResourceName: "search")),
generateNavigationController(with: UIViewController(), title: "Downloads", image: UIImage(imageLiteralResourceName: "downloads"))
]
}

fileprivate func setupTabBar() {
tabBar.tintColor = .purple
}

// MARK:- Helpers

fileprivate func generateNavigationController(with rootViewController: UIViewController, title: String, image: UIImage) -> UIViewController {

let controller = UINavigationController(rootViewController: rootViewController)

controller.tabBarItem.title = title
controller.tabBarItem.image = image

rootViewController.navigationItem.title = title
navigationController?.navigationBar.prefersLargeTitles = true

return controller
}
}

测试

import Foundation
import XCTest

@testable import Podcasts

class MainTabBarControllerTests: XCTestCase {

func testTheInitialViewControllerShouldHaveTitleFoo() {
let sut = MainTabBarController()

let _ = sut.viewDidLoad()

XCTAssertEqual(sut.navigationItem.title, "Favourites")
}
}

最佳答案

访问代码片段中的正确 View 存在一些问题。顺便说一句,我为您的选项卡栏 Controller 编写了一个附加测试,希望它会有所帮助:)尝试这个来通过测试:

class MainTabBarControllerTests: XCTestCase {

func testFirstTabTitleIsCorrectAfterInitialSetup() {
// Given
let sut = MainTabBarController()

// When
sut.viewDidLoad()

// Then
let viewController = sut.viewControllers?.first
let title = viewController?.tabBarItem.title
XCTAssertEqual(title, "Favourites")
}

func testNavigationTitleIsCorrectAfterInitialSetup() {
// Given
let sut = MainTabBarController()

// When
sut.viewDidLoad()

// Then
let viewController = sut.viewControllers?.first as? UINavigationController
let title = viewController?.viewControllers.first?.navigationItem.title
XCTAssertEqual(title, "Favourites")
}
}

很高兴您已经使用了 Give-When-Then,但如果您改进测试的命名,那就更好了。有很多约定,例如,我更喜欢像 test_SubjectUnderTest_doSomething_whenConditionsAreCorrect 这样的约定。

这是另一个提示。尝试找出如何分离 View 和 View Controller 之间的逻辑。如果您至少接触过 MVP(模型- View -演示者),那么您就会发现它的可测试性更好。

顺便说一句,相比这种测试,考虑 UI 测试更合理。 UI 测试主要依赖于辅助功能 ID。如果您更喜欢使用 native ,最流行的测试自动化工具是 Appium 或 XCUITests/Earlgrey。

关于swift - UITabBarController 中的测试方法正确设置标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52579803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com