jps*_*ain 29 configuration integration-testing objective-c xcode4
我想做一个应用程序测试,解析一些json,存储到核心数据,并读出一些对象.
我的代码如何知道它是作为测试或正常运行的一部分运行的?只是某种方式知道"我们是否在测试目标中"?因为应用程序启动它现在启动了一堆请求,用服务器中的信息填充我的coredata.我不希望它在我的测试中这样做.我想启动应用程序,从文件中读取HARDCODED json并使用与coredata相同的方法存储它,并验证结果.
如果有人可以解释如何在每个目标的基础上传递特定的键值对,可以从应用程序中读取,我会更高兴.
jps*_*ain 34
没关系......想通了你设置它的"方案".
例如,如果您希望TARGET = TEST在Test期间可用而TARGET = RUN在运行期间显示,只需在Scheme> Environment Variables> Name/Value中设置它即可.
然后从您的应用程序,你可以做:
[[[NSProcessInfo processInfo] environment] objectForKey:@"TARGET"]
Run Code Online (Sandbox Code Playgroud)
使用预处理器宏的构建设置DID不适用于我b/c我的测试目标(用于应用程序/集成测试)取决于我的主(非测试)目标,因此首先构建主目标,然后运行,并结束即使您在运行的目标中定义的宏之后,也可以使用主目标预处理器宏.如果我在这里错过了什么,请随时解释一下.
Chr*_*ble 12
如果通过"测试目标"表示您的单元测试(即Product > Test或?U),则可以向目标添加预处理器宏并在代码中检查该宏.这允许类似以下内容:
#ifdef TEST
// Load the hard-coded data.
#else
// Load data from the server.
#endif
Run Code Online (Sandbox Code Playgroud)
要执行此操作,请单击项目导航器中的项目文件,选择测试目标,单击Build Settings选项卡,搜索"宏",双击该Preprocessor Macros选项,然后添加一个!
有两种情况需要处理:
Tests则运行一些代码#import某些目标的某些文件,例如Tests.测试目标的目标代码:
在ProjectName-Prefix.pch文件中创建一个宏,如下所示:
#define IsTestTarget [[[[NSProcessInfo processInfo] environment][@"XCInjectBundle"] pathExtension] isEqualToString:@"xctest"]
Run Code Online (Sandbox Code Playgroud)
然后在应用程序中的任何位置调用它:
if (IsTestTarget) {
//Do something specific for test target;
} else {
//Otherwise do something else
}
Run Code Online (Sandbox Code Playgroud)
有条件的#import:
对于选择目标#import时的某些文件Tests,您需要将a添加Preprocessor Macro到Test目标并将其用作:
#ifdef APPTESTS
#import "TestSpecificFile.h"
#else
#import "SomeOtherFile.h"
#endif
Run Code Online (Sandbox Code Playgroud)
以下是如何添加Preprocessor Macro:

您可以使用以下功能.
+(BOOL) isRunningTests
{
NSDictionary* environment = [[NSProcessInfo processInfo] environment];
NSString* injectBundle = environment[@"XCInjectBundle"];
return [[injectBundle pathExtension] isEqualToString:@"xctest"];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18370 次 |
| 最近记录: |