相关疑难解决方法(0)

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

我在Xcode 4中创建了一个全新的iOS项目,并包含了单元测试.默认应用程序有2个目标,主应用程序和单元测试包.使用"产品>测试"(Command-U)构建应用程序,构建单元测试包,启动iOS模拟器并运行测试.现在,我希望能够从命令行执行相同的操作.命令行工具(xcodebuild)没有"测试"操作,但似乎我应该能够直接构建单元测试包目标,因为它取决于应用程序本身.但是,运行:

xcodebuild -target TestAppTests -sdk iphonesimulator4.3 -configuration Debug build
Run Code Online (Sandbox Code Playgroud)

给出以下消息:

/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).
Run Code Online (Sandbox Code Playgroud)

这似乎是一个谎言,因为当我从GUI运行Command-U时,为我的单元测试包目标设置了测试主机.我之前看过有关逻辑测试和应用程序测试之间分离的帖子,但似乎Xcode 4消除了这种区别.我是如何从命令行运行测试的?

xcode unit-testing xcodebuild ocunit xcode4

47
推荐指数
4
解决办法
3万
查看次数

在iphonesimulator 6.0中,Keychain Services API失败并出现errSecNotAvailable

使用命令行工具执行目标并且iphone模拟器设置为硬件版本6.0(10A403)时,使用errSecNotAvailable调用Keychain服务失败.如果我将模拟器版本更改为其他先前版本(4.3,5.0,5.1)并使用相同的命令行脚本重新执行,则调用会成功.

我正在运行最新的XCode 4.5,并且从XCode中下载了命令行工具.

要重现此错误,请执行以下操作:

  1. 使用OCUnit目标设置ios库项目
  2. 将Base SDK设置为6.0
  3. 将iOS部署目标设置为4.3
  4. 将帖子末尾的代码复制并粘贴到测试项目中(它只会尝试存储密码并检索它)
  5. 将Security.framework添加到OCUnit目标

在XCode中执行OCUnit目标并查看iphone模拟器中设置的硬件版本的测试通过(只需在执行之间进行更改).

使用以下命令从命令行执行OCUnit目标:

xcodebuild -target TARGET_NAME_HERE -sdk iphonesimulator -configuration Release TEST_AFTER_BUILD=YES
Run Code Online (Sandbox Code Playgroud)

将iphone模拟器设置为硬件版本6.0,测试将失败.如果将iphone模拟器硬件版本更改为4.3,5.0或5.1并再次执行命令行脚本,则测试将成功.

这是一个命令行工具问题吗?一个iPhone模拟器的问题?从命令行问题运行的OCUnit目标?

谁喜欢只在彗星对齐时通过的单位测试?

有任何想法吗?

这是代码:

#define KEYCHAIN_ITEM_ATTRIBUTES (id)kSecClassGenericPassword, kSecClass, @"MyService", kSecAttrService, @"MyPassword", kSecAttrAccount

const NSString* MyPassword = @"blabla";

- (void)testExample
{
    // remove previous keychain item
    OSStatus status = SecItemDelete((CFTypeRef)[NSDictionary dictionaryWithObjectsAndKeys:KEYCHAIN_ITEM_ATTRIBUTES, nil]);
    NSLog(@"SecItemDelete status:%ld",status);
    NSParameterAssert(status == errSecSuccess || status == errSecItemNotFound);

    // add keychain item with new value
    NSData *data = [MyPassword dataUsingEncoding:NSUTF8StringEncoding];
    status …
Run Code Online (Sandbox Code Playgroud)

security unit-testing keychain ios ios-simulator

5
推荐指数
1
解决办法
1665
查看次数