我正在开发一个iPad应用程序.我不确定是否应该为这个应用程序编写单元测试,如果是的话,我应该如何编写它们.
你会建议什么是为iPhone/iPad编写单元测试的最佳方法?
我是objective-c的新手,我发现我不知道如何正确断言某个给定标签上的文本属性等于原始字符串值.我不确定我是否只需要将标签转换为NSString,或者我是否需要直接修改我的断言语句.
@interface MoreTest : SenTestCase {
MagiczzTestingViewController* controller;
}
- (void) testObj;
@end
@implementation MoreTest
- (void) setUp
{
controller = [[MagiczzTestingViewController alloc] init];
}
- (void) tearDown
{
[controller release];
}
- (void) testObj
{
controller.doMagic;
STAssertEquals(@"hehe", controller.label.text, @"should be hehe, was %d instead", valtxt);
}
@end
Run Code Online (Sandbox Code Playgroud)
我的doMagic方法的实现如下
@interface MagiczzTestingViewController : UIViewController {
IBOutlet UILabel *label;
}
@property (nonatomic, retain) UILabel *label;
- (void) doMagic;
@end
@implementation MagiczzTestingViewController
@synthesize label;
- (void) doMagic
{
label.text = @"hehe";
}
- …Run Code Online (Sandbox Code Playgroud) 我正在使用Xcode的OCUnit来编写单元测试,我的测试调用了一个执行动画的方法.我希望测试方法仅在动画完成后继续.
执行动画的方法没有动画委托,我认为它不应该有.
如何在不设置动画委托的情况下等待动画以测试方法结束?
我正在使用带有Xcode 4.2的OCUnit将单元测试添加到现有的iOS项目中.我已经成功添加了一个新的构建目标(遵循以下说明:http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/)并已设置一些简单的示例测试只是为了检查我是否可以运行测试并且它们按预期工作.
我的问题是添加更多的测试文件,以及如何组织它们.现有的代码库非常广泛,包含数百个类,我们迟早需要添加测试.显然,将所有测试放在自动生成的"UnitTests.m"文件中会很疯狂.我看到我可以使用'Objective-C测试用例类'模板添加更多文件,但是我不清楚这与我添加测试目标时XCode生成的总体'UnitTest.m'有什么关系.
XCode是否只是查找测试目标的所有测试文件并运行所有测试?如果是这样,为我正在测试的每个类生成一个新的测试文件是有意义的,而在主"UnitTests.m"文件中没有任何内容.如果是这种情况,我可以安全地删除该文件,因为它不包含任何测试吗?或者是否需要保留以便在其他文件中运行其他测试?
我读了一个简单的方法来查看保存的NSUserDefaults?
我找到了应用程序的.plist文件,但是哪个是测试包的文件?
我试图测试一个实例化实例的方法MFMailComposeViewController.被测试的方法调用的多种方法MFMailComposeViewController,包括setSubject:.
我想测试setSubject是否发送了一个特定的NSString,在本例中是@"Test Message".
无论我为模拟存根中的预期字符串指定什么,都没有失败.
在单元测试类中:
#import <OCMock/OCMock.h>
- (void)testEmail {
TestClass *testInstance = [[TestClass alloc] init];
id mock = [OCMockObject mockForClass:[MFMailComposeViewController class]];
[[mock stub] setSubject:@"Test Message"];
[testInstance testMethod];
}
Run Code Online (Sandbox Code Playgroud)
在TestClass中:
- (void)testMethod {
MFMailComposeViewController *mailComposeVC = [[MFMailComposeViewController alloc] init];
[mailComposeVC setSubject:@"Bad Message"];
}
Test Suite 'Email_Tests' started at 2011-09-17 18:12:21 +0000
Test Case '-[Email_Tests testEmail]' started.
Test Case '-[Email_Tests testEmail]' passed (0.041 seconds).
Run Code Online (Sandbox Code Playgroud)
测试应该失败.
我在iOS模拟器中对此进行测试,并在设备上获得相同的结果.
我究竟做错了什么?有没有办法实现这个目标?
任何人都有一个或两个链接到"STAssertThrows"的IOS/OCUnit文档
API doco +一个如何使用的例子会很棒
我有以下课程:
#import "Period.h"
@implementation Period
...
- (BOOL)isEqualTo:(id)object {
return [self isEqual:object];
}
- (BOOL)isEqual:(id)object {
if (object == self) {
return YES;
}
if ([[object beginDate] hash] == [[self beginDate] hash] &&
[[object endDate] hash] == [[self endDate] hash]) {
return YES;
}
return NO;
}
...
@end
Run Code Online (Sandbox Code Playgroud)
还有以下测试,使用以下方法编写OCUnit:
Period *period;
NSDate *beginDate;
NSDate *endDate;
- (void)setUp {
beginDate = [NSDate dateWithString:@"2011-02-25"];
endDate = [NSDate dateWithString:@"2011-03-25"];
period = [[Period alloc] initWithBeginDate:beginDate
endDate:endDate];
}
- (void)testEndDateShouldBeGreaterOrEqualThanBeginDate {
Period …Run Code Online (Sandbox Code Playgroud) ocunit ×8
unit-testing ×5
ios ×3
iphone ×3
objective-c ×3
animation ×1
ipad ×1
ocmock ×1
xcode ×1
xcode4 ×1