适用于iOS的单元测试

问题描述:

我是单元测试新手,想尝试一下。适用于iOS的单元测试

我创建了一个按钮(获取总和)和3个文本框(输入2个数字并输出总和)的视图控制器。

int aNum = [self.firstNumber.text intValue]; 
int bNum = [self.secondNumber.text intValue]; 

sum = aNum + bNum; 
self.total.text = [NSString stringWithFormat:@"%i", sum]; 
[self dismissKeyboard]; 

而且我的测试代码:

vc = [[TestingViewController alloc] init]; 
vc.firstNumber.text = @"1"; 
vc.secondNumber.text = @"2"; 

[vc getSum:nil]; 

STAssertTrue([vc.total.text isEqualToString:@"3"], @"total should be 3"); 

测试失败,因为我曾尝试与UI元素的工作。

我的问题是:是否可以使用这样的UI元素进行测试?我将如何编写一个测试来实现这个目标?

谢谢你们!

你需要下载这是通过访问视图所做的NIB(见iOS' view lifecycle):

vc = [[TestingViewController alloc] init]; 
// vc.firstNumber is nil right now, because the view isn't loaded 
[vc view]; 
// vc.firstNumber now exists 
vc.firstNumber.text = @"1"; 
vc.secondNumber.text = @"2"; 

[vc getSum:nil]; 

STAssertTrue([vc.total.text isEqualToString:@"3"], @"total should be 3"); 

另外,如果视图是一个UIWindow层次结构的一部分,你不需要做这个(即 - 端到端测试)

是的,在单元测试中测试UI元素是绝对有可能的。

技术,这和以上(包括依赖于网络的测试代码)是覆盖在测试驱动的iOS开发(开发者库)由格雷厄姆·李是一个巨大的资源: http://www.amazon.com/Test-Driven-iOS-Development-Developers-Library/dp/0321774183

可能是该视图ISN没有得到装载。当我开始在iOS上进行单元测试时,我遇到了同样的问题。尝试调用[vc loadView];在你初始化viewcontroller之后。

vc = [[TestingViewController alloc] init]; 
[vc loadView]; 

您试图在运行时测试应用程序的功能。你了解单元测试和应用程序测试之间的区别吗?你是否阅读并服从documentation on application tests?你在设备上运行吗?

这里是一个有用的教程:http://cocoawithlove.com/2009/12/sample-iphone-application-with-complete.html

测试用户界面,ü可以使用JavaScript和在仪器上运行。