• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

带有核心数据/MagicalRecord 意外行为的 iOS 单元测试

[复制链接]
菜鸟教程小白 发表于 2022-12-12 22:18:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我得到了以下测试代码。

@interface SubscriberTest : XCTestCase

@end

@implementation SubscriberTest

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

}


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

- (void)testParseSubscriberWithEvents
{
   NSEntityDescription *pDesc = [NSEntityDescription entityForName"Subscriber"
                                         inManagedObjectContext:[NSManagedObjectContext MR_defaultContext]];
   XCTAssertNotNil(pDesc);


- (void)testParseSubscriberWithReviews
{
   NSEntityDescription *pDesc = [NSEntityDescription entityForName"Subscriber"
                                         inManagedObjectContext:[NSManagedObjectContext MR_defaultContext]];
    XCTAssertNotNil(pDesc);

}

@结束

我不明白为什么第一次测试总是成功而第二次总是失败.. 就像每个测试都在创建自己的 ManagedObjectContext,但第二个不知道我的实体... 实际上这段代码是用来测试json数据的导入的。我调试了MagicalRecord的代码,发现问题出在方法上

[NSEntityDescription entityForName: inManagedObjectContext:]

在第二个测试中返回 nil...

我试图评论第一个测试,第二个测试成功了!但是如果他们是两个测试,那么第二个每次都失败......

关于我正在使用 MagicalRecord 2.3.0.beta 的信息(因为 2.2 importFromObject 方法中的一些错误......) 任何帮助和解释将不胜感激!



Best Answer-推荐答案


看起来在第一次测试之后 -tearDown 破坏了 CoreData 堆栈,由于某种原因,下次调用 -setUp 时 MagicalRecord 没有正确初始化核心数据堆栈(您发现第二次上下文为零),导致您的第二次测试失败.我发现如果你设置核心数据堆栈一次(你可以通过在 -setUp 中调用 dispatch_once 来实现)并在 -tearDown 中调用 [Subscriber MR_truncateAll] 它确实有效。

关于带有核心数据/MagicalRecord 意外行为的 iOS 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23759485/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap