3

我的应用程序中有一个 UIbutton。当我单击该按钮时,它会删除 NSMutableArray 中的最后一个对象。为此,我想编写单元测试。请任何人给我你的建议。

我使用此代码来了解何时执行了对 UIButton 的单击:

[viewControllerObject.backButton1 sendActionsForControlEvents:UIControlEventTouchUpInside];

谢谢,瑞奇。

4

3 回答 3

3

在“单元”级别,您正在测试两件事:

  • 点击按钮会发送操作方法吗?
  • 动作方法是否从数组中删除最后一个对象?

忽略第一个,这是 Apple 的问题(或者说这是一个集成测试)。如果您考虑 Assemble、Act、Assert 过程,则第二个很简单:

  1. 组装:构建您的视图控制器及其内容数组。
  2. 动作:调用动作方法。
  3. 断言:检查最后一个对象是否被删除。
-(void)testRemovalOfLastObjectOnButtonAction
{
    //... build and populate the view controller
    id lastObject = [array lastObject];
    [viewController buttonTapped: sender];
    STAssertFalse([array containsObject: lastObject], @"Object %@ should be removed", lastObject);       
}

注意我明确测试最后一个对象是否被删除,而不是计数是否减少:如果任何对象被删除,就会发生这种情况。

于 2013-04-05T09:20:23.483 回答
1

您可以通过几种不同的方式执行此操作。一个建议是观看这个很棒的教程

该视频解释了如何在 UIKit 中进行单元测试。

于 2013-04-05T09:07:00.267 回答
1

XCode 原生支持单元测试。如果您开始一个新项目,请查找显示“包含单元测试”的复选标记。如果你使用它,你将有一个名为<project_name>Tests. 打开其中的 .m 文件,您将看到一个- (void)testExample可以放置测试的方法。

您可以使用许多函数进行测试,例如STAssertTrueSTAssertNotNil。在此处查看 Apple 文档:https ://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/UnitTesting/03-Writing_Test_Case_Methods/writing_tests.html#//apple_ref/doc/uid/TP40002143-CH4- SW1

在你的情况下,你可能会做这样的事情:

NSInteger arrayCount = mArray.count;
[yourInstance performButtonAction];
STAssertEquals(arrayCount -1, mArray.count);
于 2013-04-05T09:17:44.843 回答