XCTests 中的核心数据

Posted

技术标签:

【中文标题】XCTests 中的核心数据【英文标题】:Core Data in XCTests 【发布时间】:2015-09-01 11:13:23 【问题描述】:

我在应用程序中使用 Magical Record。 我初始化

   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions     
    [MagicalRecord setupAutoMigratingCoreDataStack];

并且应用程序通常在互联网连接存在时做一些事情。 我曾尝试编写 XCTest,但总是收到 SIGABRT:

   + (NSManagedObjectContext *) MR_defaultContext
   
      @synchronized(self) 
      NSAssert(MagicalRecordDefaultContext != nil, @"Default context is nil! Did you forget to initialize the Core Data Stack?");
      return MagicalRecordDefaultContext;
       
   

我已经调查过了,可以看到 AppDelegate 中成功初始化了那个神奇的记录。

我什至尝试过

   - (void)setUp 
       [super setUp];
       [MagicalRecord setDefaultModelFromClass:[self class]];
       [MagicalRecord setupCoreDataStackWithInMemoryStore];
   

   - (void)tearDown 
       [MagicalRecord cleanUp];
       [super tearDown];
   

但没有运气。有人有什么想法吗?

【问题讨论】:

【参考方案1】:

如果您使用 Magic 记录,则需要执行一些额外的步骤。见here。

【讨论】:

我正在使用 cocoapods 并且 Magical Record 包含在 podfile 的测试目标中 谢谢,但我已经看到了这个解决方案。它将用于测试核心数据方法本身,但我想测试与核心数据无关的另一个应用程序功能。当我测试它们时,Magical Record 会松散它堆栈并将默认上下文设置为 nil,然后当应用程序的其他部分尝试调用其方法时 SIGABRT @dimak 你能解决这个问题吗?面临同样的问题。如果你能分享会很有帮助 我已经通过调用 [MagicalRecord setupAutoMigratingCoreDataStack] 解决了这个问题;两次。设置测试构建变量,如果是测试,那么我调用 migrate stack 两次

以上是关于XCTests 中的核心数据的主要内容,如果未能解决你的问题,请参考以下文章

XCTests 过早取消

在 XCTests 中使用 AFHTTPRequestOperation

为啥我应该使用单独的测试目标来运行 XCTests,我应该怎么做?

单例不使用 XCTests - iOS

在运行 XCTests 时访问主应用程序包

我应该重构以便能够使用 XCTests 进行模拟吗?