Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 在XCode 7 Beta/Swift 2中对核心数据进行单元测试 简言之:_Unit Testing_Core Data_Swift2_Xcode7 - Fatal编程技术网

Unit testing 在XCode 7 Beta/Swift 2中对核心数据进行单元测试 简言之:

Unit testing 在XCode 7 Beta/Swift 2中对核心数据进行单元测试 简言之:,unit-testing,core-data,swift2,xcode7,Unit Testing,Core Data,Swift2,Xcode7,我正试图在XCode 7/Swift 2中为核心数据模型编写一个单元测试。但是,一个简单的测试,例如测试模型中的行数是否等于我知道的行数,失败了(我知道只有一行,但测试没有看到)。我最好的猜测是,我得到的是一个不同的(干净的?)版本的managedObjectContext,但我不知道如何获得与应用程序相同的版本。除了下面描述的技术(按照Andrew Bancroft网站上的链接说明),我还尝试将应用程序委托添加到SOTestTests,并获得managedObjectContext,如下所示

我正试图在XCode 7/Swift 2中为核心数据模型编写一个单元测试。但是,一个简单的测试,例如测试模型中的行数是否等于我知道的行数,失败了(我知道只有一行,但测试没有看到)。我最好的猜测是,我得到的是一个不同的(干净的?)版本的
managedObjectContext
,但我不知道如何获得与应用程序相同的版本。除了下面描述的技术(按照Andrew Bancroft网站上的链接说明),我还尝试将应用程序委托添加到SOTestTests,并获得
managedObjectContext
,如下所示

let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
…但我随后得到一个错误,即XCode
[c]不能将类型为'SOTest.AppDelegate'(0x25bb8)的值强制转换为'sotests.AppDelegate'(0x2c7bb78)。

长格式: 以下是设置我能想到的最小可复制示例的步骤:

  • 简单模型:一个
    实体
    )和一个
    属性
    名称
    ,类型
    字符串
    )<代码>人员是唯一的,
    名称
    是非可选的
  • 创建子类(编辑器>创建NSManagedObject子类…)
  • (在
    Person.swift
    中注释掉
    @objc(Person)
    ,以避免生成错误。)
  • 向模型中添加一行。(只运行获取实体并保存一次的代码——在后续运行时对其进行注释,以避免由于
    unique
    属性而导致冲突错误。)下面是执行此操作的
    ViewController
  • 然后,我在构建阶段将
    Person
    子类文件添加到
    SOTestTests
    (meta,我知道),根据的(优秀)站点上的示例设置
    managedObjectContext
    (使用mods for Swift 2),并编写测试检查,如果有一行:
  • 通过选择
    sotests
    创建新方案,并将
    SOTest.app
    可执行文件添加到运行方案中
  • 当我运行它时,
    ViewController
    类打印出一行,但是测试打印出零行,测试失败


    知道我做错了什么吗?

    只需导入实际的项目即可访问AppDelegate和其他类

    @testable import SOTest
    

    无需将所有内容添加到测试目标。

    只需导入实际项目即可访问AppDelegate和其他类

    @testable import SOTest
    

    无需将所有内容添加到测试目标。

    如果导入
    SOTest
    让managedObjectContext=(UIApplication.sharedApplication().delegate as!SOTest.AppDelegate)。managedObjectContext
    ,则在普通项目中,模块SOTest中没有名为AppDelegate的
    类型,它与您的确切托管对象上下文行一起工作,不会出现错误。请注意,最新的Xcode会自动执行上述导入,如下所示:
    @testable import-SOTest
    。将
    @testable import-SOTest
    添加到我的
    SOTestTests
    类中完成了这项任务。由于某种原因,它无法将数组强制转换为
    [Person]
    (我不得不将其更改为
    [NSManagedObject]
    ),但测试现在通过了!谢谢考虑到最后一个问题,好好想想!更改为
    [SOTest.Person]
    成功了。如果可以,我会投两次票。:-)如果我导入
    SOTest
    让managedObjectContext=(UIApplication.sharedApplication().delegate为!SOTest.AppDelegate).managedObjectContext
    ,我会得到一个错误,即在普通项目的模块SOTest
    中没有名为AppDelegate的类型,它与您的确切托管对象上下文行一起工作,不会出现错误。请注意,最新的Xcode会自动执行上述导入,如下所示:
    @testable import-SOTest
    。将
    @testable import-SOTest
    添加到我的
    SOTestTests
    类中完成了这项任务。由于某种原因,它无法将数组强制转换为
    [Person]
    (我不得不将其更改为
    [NSManagedObject]
    ),但测试现在通过了!谢谢考虑到最后一个问题,好好想想!更改为
    [SOTest.Person]
    成功了。如果可以,我会投两次票。:-)
    @testable import SOTest