相关疑难解决方法(0)

查看控制器TDD

我试图在我的项目中添加一些单元测试来测试视图控制器.但是我似乎遇到了看似简单的问题.我已经创建了一个示例项目,我将参考该项目.https://github.com/pangers/ViewControllerTesting

该示例包含一个UINavigationController作为初始视图控制器.UINavigationController的根视图控制器是FirstViewController.FirstViewController上有一个按钮,它可以切换到SecondViewController.在SecondViewController中有一个空文本字段.

我想添加的两个测试是:
1)FirstViewController中的检查按钮标题是"下一屏幕".
2)检查SecondViewController中的文本字段是否为空,"".

我听说有关将swift文件添加到主目标并且测试目标不是好习惯的报告.但是,最好在公共测试中创建您想要访问的任何内容,并将主目标导入测试中.这就是我所做的.(我还将主要目标的"定义模块"设置为YES,因为这是我在几篇文章中所读到的).

在FirstViewControllerTests中,我使用以下代码实例化了第一个视图控制器:

var viewController: FirstViewController!

override func setUp() {
    let storyboard = UIStoryboard(name: "Main", bundle: NSBundle(forClass: self.dynamicType))
    let navigationController = storyboard.instantiateInitialViewController() as UINavigationController
    viewController = navigationController.topViewController as FirstViewController
    viewController.viewDidLoad()
}
Run Code Online (Sandbox Code Playgroud)

我添加了测试:

func testCheckButtonHasTextNextScreen() {
    XCTAssertEqual(viewController.button.currentTitle!, "Next Screen", "Button should say Next Screen")
}
Run Code Online (Sandbox Code Playgroud)

同样,对于SecondViewControllerTest,我使用以下方法进行设置:

var secondViewController:SecondViewController!

override func setUp() {
    let storyboard = UIStoryboard(name: "Main", bundle: NSBundle(forClass: self.dynamicType))
    let navigationController = storyboard.instantiateInitialViewController() as UINavigationController
    let firstviewController = navigationController.topViewController as FirstViewController
    firstviewController.performSegueWithIdentifier("FirstToSecond", sender: nil)
    secondViewController …
Run Code Online (Sandbox Code Playgroud)

tdd unit-testing uiviewcontroller ios swift

11
推荐指数
1
解决办法
4695
查看次数

创建一个视图(从initWithNibName初始化)加载其所有子视图

假设我从一个笔尖加载了一个视图控制器,并决定对场景后面的一个子视图做一些事情.在稍后的时刻,我会显示这个视图控制器的视图.

viewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[viewController.someSubview doSomething];

//later on 
[mainView addSubview:viewController.view];
Run Code Online (Sandbox Code Playgroud)

问题是,在视图出现之前似乎没有加载someSubview对象,因此不调用doSomething方法.到目前为止,我的解决方法是致电:

[mainView addSubview:viewController.view];
[viewController.view removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)

首先初始化viewcontroller的子视图.有没有更优雅的方式(如loadSubviews方法或其他东西)为此任务?

iphone load subview uiview

9
推荐指数
1
解决办法
1万
查看次数

标签 统计

ios ×1

iphone ×1

load ×1

subview ×1

swift ×1

tdd ×1

uiview ×1

uiviewcontroller ×1

unit-testing ×1