我NSManagedObject在单元测试中创建了一堆简单的s.它们只有一个name类型的属性NSString *.我总是给我NSManagedObject相同entityName和Class名字.
我想避免编写以下代码30次来设置单元测试:
@interface FooTest : GHTestCase {
Foo *foo;
}
@end
@implementation FooTest
- (void) setUp {
[super setUp];
foo = [NSEntityDescription insertNewObjectForEntityForName:@"Foo"
inManagedObjectContext:managedObjectContext];
foo.name = @"foo";
}
@end
Run Code Online (Sandbox Code Playgroud)
既然foo是一个ivar,我认为我应该能够写一个宏来获取foo(Foo)的类型,并用来创建我的Foo:
#define InsertManagedObjectByVariable(variable) \
do { \
variable = [NSEntityDescription insertNewObjectForEntityName:NSStringFromClass([typeof(variable) class])]; \
variable.name = (NSString *) CFSTR(#variable);
} while(0)
Run Code Online (Sandbox Code Playgroud)
但是,这会在clang中导致以下警告:
variable = [NSEntityDescription insertNewObjectForEntityName:NSStringFromClass([typeof(variable) class])];
^
Expected expression
Run Code Online (Sandbox Code Playgroud)
我还以为我可以尝试确定使用Objective-C的运行时类型 …