【发布时间】:2021-12-01 15:27:02
【问题描述】:
我想为视图控制器中的委托方法之一的方法编写一个单元测试用例。我为 VC 创建了一个单元测试用例类,并正在尝试为该方法编写一个单元测试。
这是在VC中实现的方法。 如何编写单元测试用例?
extension DownloadBaseViewController:EMPDecisionTreeCoordinatorDelegate {
func decisionEmptyTreeFeedbackButtonTapped() {
if let feedbackNavVc = storyboard?.instantiateViewController(identifier: "PremiumFeedbackNavViewController") as? PremiumCustomNavigationController {
if let feedbackVc = feedbackNavVc.children.first as? PremiumFeedbackViewController {
feedbackVc.id = self.fileDetails?.id
self.decesiontreeCoordinator!.rootViewController.present(feedbackNavVc, animated: true, completion: nil)
}
}
}
}
为 VC 创建了一个单元测试类,并尝试无法正确编写它,遵循一些未找到委托方法的教程。
import XCTest
class DownloadBaseViewControllerTests: XCTestCase {
var downloadBaseViewController: DownloadBaseViewController!
func testDecisionEmptyTreeFeedbackButtonTapped() throws {
let feedbackVCNavigation = downloadBaseViewController.decisionEmptyTreeFeedbackButtonTapped
XCTAssertNotNil(feedbackVCNavigation, "Download base view controller contains feedback view controller and succesfully able to navigate")
///Test case Build succeded but this is not the way to test it properly need heads up on this.
}
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
}
}
【问题讨论】:
-
您编写单元测试方法来验证预期的行为,那么您需要在这里验证的行为是什么?另请注意,要编写单元测试,代码必须是可测试的,这主要意味着允许注入依赖项。在这里,如果您要测试的行为是,当您调用该方法时,PremiumFeedbackViewController 是使用 decesiontreeCoordinator 呈现的,那么只需在控制器中注入一个 Spy decesiontreeCoordinator 然后调用该方法,然后检查是否使用预期类型调用了当前方法控制器。
-
@ChristosKoninis 我没有遗漏一些东西来正确测试它,你能提供这次有用的答案吗?
-
正如我之前所写,我需要知道您需要先使用单元测试方法测试的行为,然后才能提供更详细的示例
-
@ChristosKoninis 用我尝试过的行为更新了问题,你可以看看并告诉我。
-
@ChristosKoninis 能否提供解释答案等待您的回复。
标签: ios swift xcode unit-testing xctestcase