Tag: ocunit

我如何从SenTestingKit / OCUnit迁移到XCTest?

我正在将我的项目从Xcode 4.6.3迁移到Xcode 5.0.2。 该项目的unit testing是用SenTestingKit / OCUnit开发的。 现在,当我在Xcode 5中运行testing时,从RunUnitTests脚本中得到一个错误,告诉我这一点 RunUnitTests已经过时。 Xcode 5发行说明中可能与此有关: SenTestingKit和OCUnit已弃用。 使用移动器移动到XCTest。 不幸的是,我还没有find更多关于这个神秘的“移民”的信息。 可能我的google-fu缺乏[再次],所以我的主要问题是:如何将unit testing从SenTestingKit / OCUnit迁移到新的XCTest(带或不带“migrator”)? 第二个问题,如果迁移是一个复杂的业务:是否有可能让Xcode 5运行仍然基于SenTestingKit / OCUnit的unit testing? 毕竟这些只是被弃用,所以他们仍然应该在周围和function。

XCTAssertEqual错误:(“3”)不等于(“3”)

NSMutableArray *arr = [NSMutableArray array]; [arr addObject:@"1"]; [arr addObject:@"2"]; [arr addObject:@"3"]; // This statement is fine. XCTAssertTrue(arr.count == 3, @"Wrong array size."); // This assertion fails with an error: ((arr.count) equal to (3)) failed: ("3") is not equal to ("3") XCTAssertEqual(arr.count, 3, @"Wrong array size."); 我对XCTAssertEqual有什么不了解? 为什么最后的断言失败?

用OCUnit进行unit testing的例子

我真的很难理解unit testing。 我明白TDD的重要性,但是我所读到的所有unit testing的例子都是非常简单和微不足道的。 例如,testing以确保属性已设置或内存分配给数组。 为什么? 如果我编码出来了..alloc] init] ,我真的需要确保它的工作? 我是新来的开发人员,所以我相信我在这里错过了一些东西,特别是围绕着TDD的所有热潮。 我认为我的主要问题是我找不到任何实际的例子。 这里是一个setReminderId方法,似乎是一个很好的候选人testing。 什么有用的unit testing看起来像确保这是工作? (使用OCUnit) – (NSNumber *)setReminderId: (NSDictionary *)reminderData { NSNumber *currentReminderId = [[NSUserDefaults standardUserDefaults] objectForKey:@"currentReminderId"]; if (currentReminderId) { // Increment the last reminderId currentReminderId = @(currentReminderId.intValue + 1); } else { // Set to 0 if it doesn't already exist currentReminderId = @0; […]

OCUnit和NSBundle

我创build了与“iPhone开发指南”一致的OCUnittesting。 这是我想要testing的课程: // myClass.h #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface myClass : NSObject { UIImage *image; } @property (readonly) UIImage *image; – (id)initWithIndex:(NSUInteger)aIndex; @end // myClass.m #import "myClass.m" @implementation myClass @synthesize image; – (id)init { return [self initWithIndex:0]; } – (id)initWithIndex:(NSUInteger)aIndex { if ((self = [super init])) { NSString *name = [[NSString alloc] initWithFormat:@"image_%i", aIndex]; NSString […]

Xcode 4:从命令行(xcodebuild)运行testing?

我已经在Xcode 4中创build了一个全新的iOS项目,并且包含了unit testing。 默认应用程序有2个目标,主应用程序和unit testing包。 使用“Product> Test”(Command-U)构build应用程序,构buildunit testing包,启动iOS模拟器并运行testing。 现在我想能够从命令行做同样的事情。 命令行工具(xcodebuild)没有“testing”动作,但似乎我应该能够直接构buildunit testing包目标,因为它取决于应用程序本身。 但是,运行: xcodebuild -target TestAppTests -sdk iphonesimulator4.3 -configuration Debug build 给出以下消息: /Developer/Platforms/iPhoneSimulator.platform/Developer/Tools/Tools/RunPlatformUnitTests:95: warning: Skipping tests; the iPhoneSimulator platform does not currently support application-hosted tests (TEST_HOST set). 这似乎是一个谎言,因为testing主机是设置为我的unit testing捆绑目标时,我从GUI运行Command-U。 我已经看到以前的post关于逻辑testing和应用程序testing之间的分离,但似乎Xcode 4消除了这种区别。 任何线索我怎么能从命令行运行我的testing?

链接错误,同时build立一个unit testing目标

我有一个定期的目标和unit testing目标的XCode4 / iOS项目。 一切工作正常,除非我试图#我的testing类中的我的类之一,并尝试使用它。 如果我尝试构buildunit testing目标,则会收到以下链接错误: Undefined symbols for architecture i386: "_OBJC_CLASS_$_FRRCategory", referenced from: objc-class-ref in CategoryTests.o ld: symbol(s) not found for architecture i386 collect2: ld returned 1 exit status 在CategoryTests.m中,我以这种方式导入头文件: #import "../todoro/FRRCategory.h" 我究竟做错了什么?

Xcode中私有方法的unit testing

我正在尝试玩具项目中的testing驱动开发。 我可以得到为我的类的公共接口工作的testing(虽然我仍然在围栏,因为我正在编写更多的testing代码比在被testing的方法)。 因为我喜欢保持公共接口清洁,所以我倾向于使用很多私有方法。 不过,我仍然想使用这些方法的testing。 由于Cocoa是一种dynamic语言,我仍然可以调用这些私有方法,但是在我的testing中我得到了警告,我的类可能不会对这些方法做出响应(虽然很明显)。 由于我喜欢编译没有警告,这里是我的问题: 我如何closuresXcode中的这些警告? 还有什么我可以做的关掉这些警告? 我在尝试“白盒”testing时做错了什么?