我们有一个静态变量,默认值为:
static NSDictionary *g_primaryKeyFieldName = NULL;
我们在didFinishLaunchingWithOptions
方法中使用适当的值初始化它。
g_primaryKeyFieldName = [NSDictionary dictionary...];
正常运行应用程序时,一切似乎都很好。但是,在运行测试时,变量会被初始化,但之后它的值会再次设置为初始NULL
值。
我检查过该变量并未设置为nil
或已取消分配,因为如果我将其默认值设置为其他值:
static NSDictionary *g_primaryKeyFieldName = @"Some String";
那就是变量得到的值。
可能导致此行为的原因是什么?
答案 0 :(得分:2)
同样的问题刚好发生在我身上,我发现了一个可能的原因。如果文件(FCModel.m
)包含在应用程序和测试目标中,则会为来自应用程序和测试的调用创建单独的上下文(静态变量等)。因此,解决方案是:确保FCModel.m
文件仅在MyFCApp
中具有目标成员资格,如果您需要在测试中访问FCModel
类,则只能通过@testable import MyFCApp
访问它。
答案 1 :(得分:-2)
static NSDictionary* g_primaryKeyFieldName = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
g_primaryKeyFieldName = @{
@"k": @100,
@"u": @400,
@"m": @40,
};
});