领域模型在运行单元测试时不存储数据

Posted

技术标签:

【中文标题】领域模型在运行单元测试时不存储数据【英文标题】:Realm model stores no data while running unittests 【发布时间】:2015-08-10 10:41:39 【问题描述】:

我正在尝试使用 ios 8.x 和 Xcode 6.4 测试我的 Swift 1.2 应用程序。我的测试中使用了 Quick/Nimble。 现在我的领域模型存在问题:我的测试总是失败,无论我尝试插入什么 - 里面没有数据。

我从内存领域开始(没有成功),后来切换到磁盘领域,但还是没有成功。

我用领域浏览器检查了磁盘领域,但领域表没有记录。模拟器在tmpdocuments dir 中也有相应的领域文件。

我的测试如下所示:

import Quick
import Nimble

import RealmSwift
import MyDemoApp 

class TestBuilder: QuickSpec 
    override func spec() 
        var realm: Realm!

        describe("") 
            beforeEach 
                realm = Realm(inMemoryIdentifier: "test")
            

            it("something ") 
                let builder = SummaryBuilder(realm: realm)
                builder.build()
                expect(realm.objects(StatSummary).count).toEventually(equal(1)) // This test fails. The realm has 0 objects.
            
        
    

我想测试的结构是这个:

import Foundation
import RealmSwift

public struct SummaryBuilder 

 private var realm: Realm!
 public init(realm: Realm = Realm()) 
    self.realm = realm

 public func build() -> Void 
        realm.write 
            let summary = StatSummary()
        
    

write 闭包切换到隐式事务 (beginTransaction() / commitTransaction()) 没有成功。

Realm 和 Quick/Nimble 使用 Cocoapods 集成。 podfile 是:

use_frameworks!
pod 'RealmSwift'


def testing_pods
    use_frameworks!
    pod 'Quick', '~> 0.3.0'
    pod 'Nimble', '~> 1.0.0'
end

target 'MyDemoAppTest' do
    testing_pods
end

【问题讨论】:

【参考方案1】:

您似乎根本没有将 StatSummary 对象添加到领域。您应该添加任何要存储到 Realm 数据库的对象。如下:

realm.write 
    let summary = StatSummary()
    realm.add(summary) // You should add object to realm

另请参阅文档的写入部分。 https://realm.io/docs/swift/latest/#adding-objects

【讨论】:

以上是关于领域模型在运行单元测试时不存储数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中使用 MySQL 数据库连接运行多个单元测试时出错

pytest接口自动化测试结合单元测试框架pytest+数据驱动模型+allure

PHP单元,使用单元测试测试laravel日志消息

使用swift存储数据而不在领域中制作模型

表格视图单元格在整数格式时不显示数据

单元测试 - 通量和数据持久性