我正在使用SenTestingKit进行单元测试,但是我收到以下消息
不支持iOS设备上的逻辑测试.您可以在Simulator上运行逻辑测试.
我怎样才能做到这一点?
我刚下载并安装了Xcode5 GM种子.我删除了以前的xcode(DP5).当我打开我的项目时,选择"iPhone Retina(4英寸64位)"并输入Command-U来运行我的SenTeskingKit单元测试,xcode总是抱怨"模拟器正在使用 - 模拟器无法启动因为它已经在使用中." 我已经运行xcode-select指向新的xcode,重新启动我的MacBookPro,并确保在Activity Monitor下没有其他iPhone sim进程运行.和想法?TIA.麦克风
有没有办法忽略特定的测试用例而不将其评论出来?
有些测试是在实现存在之前编写的,所以在提交任何代码之前,我想先将这些测试标记为忽略,这样就不会给任何同事带来任何影响.
对它们进行评论会导致失败,不完整的测试失败.
我似乎能够找到用于测试异常的唯一解决方案是使用SenTestingKit的STAssertThrows和STAssertThrowsSpecific,但是在抛出异常的两种情况下,被测试的应用程序都会挂起,直到我手动要求它继续.当然,测试框架应该吞下这些例外吗?如果没有,是否有人对测试异常有任何建议?
如何根据当前方案使测试主机/捆绑加载器动态化?现在,该值设置为:
$(BUILT_PRODUCTS_DIR)/MyApp1.app/MyApp1
Run Code Online (Sandbox Code Playgroud)
问题是我在工作区中有4个应用程序,我想为所有这些应用程序使用相同的单元测试套件.如何根据当前方案动态更改"MyApp1"部分?它是基于构建期间的环境变量吗?我尝试将它设置为$(PROJECT_NAME)之类的东西,但这些似乎得到了测试套件的名称.
有没有办法在运行单元测试时强制使用特定的语言环境?
例如。始终使用 en_US 或强制无语言环境,以便不加载任何 .lproj 文件。
我的单元测试对设置应用程序(在 iOS 模拟器中)中当前选择的语言很敏感。最好我希望我的单元测试对语言不敏感。
下面是我的单元测试代码,显示了问题
@interface MYGalleryTests : SenTestCase
@end
@implementation MYGalleryTests
-(void)test0 {
// This test doesn't work.
// I get 'No pictures' when locale is en_US
// I get 'Ingen billeder' when locale is da_DK
NSString* actual = [MYGallery emptyMessage];
NSString* expected = @"EMPTY_MESSAGE";
STAssertEqualObjects(actual, expected, nil);
}
@end
@interface MYGallery : NSObject
+(NSString*)emptyMessage;
@end
@implementation MYGallery
+(NSString*)emptyMessage {
return NSLocalizedStringFromTable(@"EMPTY_MESSAGE", @"Gallery", @"Message shown when gallery is empty");
}
@end
en.lproj/Gallery.strings
/* Message …Run Code Online (Sandbox Code Playgroud) 我的单元测试套件包含一些仅适用于最新iOS版本的测试用例.预计,在较旧的iOS版本上运行套件时,这些测试会失败.
是否有标准方法来指示这些测试用例应仅在特定的iOS版本上运行?
我想到的一个选择:
- (void) testSomethingThatOnlyWorksOniOS7
{
const BOOL iOS7OrHigher = floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1;
if (!iOS7OrHigher) return;
// Actual test goes here
}
Run Code Online (Sandbox Code Playgroud)
或者,我可以告诉SenTestCase您动态跳过某些测试吗?
我有一个预先存在的项目,我已经添加了核心数据模型.我添加了核心数据框架,添加了一个包含实体的数据模型,并将其包含在我的应用程序目标中,以及一些生成的NSManagedObject类.它编译得很好,现在我想为我创建的实体添加一些测试.按照这些说明,我已经设置了一个逻辑测试基类,其setUp方法如下:
- (void)setUp {
model = [NSManagedObjectModel mergedModelFromBundles:nil];
NSLog(@"model: %@", model);
coord = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
store = [coord addPersistentStoreWithType:NSInMemoryStoreType
configuration:nil
URL:nil
options:nil
error:NULL];
ctx = [[NSManagedObjectContext alloc] init];
[ctx setPersistentStoreCoordinator:coord];
}
Run Code Online (Sandbox Code Playgroud)
这将编译并创建所有对象.但是,该模型没有实体!该NSLog()输出看起来像这样:
2011-10-29 23:56:58.941 otest[42682:3b03] model: (<NSManagedObjectModel: 0x19c6780>) isEditable 1, entities {
}, fetch request templates {
}
Run Code Online (Sandbox Code Playgroud)
那么我的实体在哪里?我已经在捆绑了一下,也没有.momd文件.我是否错过了让我的模型构建的关键步骤?
我已经为iPhone创建了一个基于地图的应用程序,并且最近将其提交给了商店.我在设备或模拟器上运行应用程序没有遇到任何问题.但是,商店拒绝了它,因为它在发布时崩溃了.崩溃日志抱怨找不到SenTestingKit框架:
Date/Time: 2012-02-21 19:02:26.048 -0800
OS Version: iPhone OS 5.0.1 (9A405)
Report Version: 104
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x00000001, 0xe7ffdefe
Crashed Thread: 0
Dyld Error Message:
Library not loaded: /Developer/Library/Frameworks/SenTestingKit.framework/SenTestingKit
Referenced from: /var/mobile/Applications/*Long Application Reference Number*/MyApp.app/U of T Map
Reason: image not found
Dyld Version: 199.5
Run Code Online (Sandbox Code Playgroud)
我已经调查了其他有这个问题的人,我确信当我继续使用它时,我会找到框架搜索路径,我需要成功地包含SenTestingKit框架.
我感到困惑并需要帮助理解的是:
为什么设备和模拟器在没有框架的情况下运行良好,但归档版本没有?
为什么它认为我需要这个框架?我在开发过程中没有使用任何单元测试.我使用了SBJSON和ASIHTTPRequest库,但是我没有在任何库代码中看到SenTestingKit的#import语句.
我是否更容易删除对SenTestingKit的需求或以某种方式在归档中正确包含它?我想解决这个问题,但我需要尽快重新提交给应用商店.
我真的想在概念层面上理解这个问题,而不是在事情发生之前就把它解决掉.
我想在我的Cocoa项目的单元测试中使用OCMock.我已下载最新版本的OCMock(2.0.1)并将OCMock.framework复制到我的项目目录中.在Xcode中,我已将框架添加到单元测试目标的链接阶段.然后我添加了一些使用OCMock类的代码.
从那时起,所有单元测试都被报告为"成功" - 绿灯,没有错误或警告.即使在引入STFail电话后,Xcode声称"测试成功".在任意测试方法中放置断点表明它们都没有被执行.
如果我使用OCMock注释掉代码,包括import指令,问题仍然存在.
STFails当我从链接阶段删除OCMock时,问题就会消失 - 即,再次失败.
这类似于我之前提出的另一个问题,但不完全相同:在这种情况下,Log Navigator中的信息显示没有错误.什么可能导致这种行为?我该怎么做才能诊断出这个问题?
sentestingkit ×10
ios ×7
unit-testing ×4
ocunit ×3
cocoa ×2
objective-c ×2
xcode ×2
64-bit ×1
core-data ×1
entities ×1
exception ×1
frameworks ×1
iphone ×1
linker ×1
nslocale ×1
ocmock ×1
testing ×1
xcode5 ×1