1

我是单元测试的新手,正在尝试。

我创建了一个带有 1 个按钮(获取总和)和 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 元素进行测试?我将如何编写测试来实现这一目标?

多谢你们!

4

4 回答 4

2

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

Graham Lee 的 Test-Driven iOS Development (Developer's Library) 涵盖了这方面的技术以及更多(包括依赖网络的测试代码),这是一个很好的资源: http ://www.amazon.com/Test-Driven-iOS-开发-开发者-库/dp/0321774183

可能是视图没有被加载。当我开始在 iOS 上进行单元测试时,我遇到了同样的问题。尝试调用 [vc loadView]; 初始化视图控制器后。

vc = [[TestingViewController alloc] init];
[vc loadView];
于 2012-09-20T04:29:25.737 回答
0

您正在尝试在应用程序运行时测试其功能。您了解单元测试和应用程序测试之间的区别吗?您是否阅读并遵守了有关应用程序测试的文档?你在设备上运行吗?

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

于 2012-09-20T04:30:32.740 回答
0

您需要加载通过访问视图完成的 NIB(请参阅iOS 的视图生命周期):

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 层次结构的一部分,则不需要这样做(即 - 端到端测试)

于 2012-09-20T04:25:08.953 回答
0

要测试 UI,您可以使用在 Instruments 中运行的 javascript。

于 2012-09-20T05:30:04.050 回答