UnitRecord技术文档
1. 安装指南
首先,确保您的环境中已经安装了Ruby和Rails。接下来,通过以下命令安装UnitRecord:
gem install unit_record
2. 项目的使用说明
UnitRecord旨在帮助开发者对ActiveRecord类进行单元测试,而不需要连接到数据库。这样做的主要好处是可以加快测试套件的运行速度。
重构Rails测试目录
Rails的测试目录通常将模型测试放在test/unit,控制器测试放在test/functional。但我们需要重新定义单元和功能测试。控制器可以进行单元测试(模拟模型并渲染视图),而模型可以进行功能测试(实际访问数据库)。每种测试类型都需要自己的测试辅助文件。建议您的测试目录结构如下:
test
test_helper.rb
unit
unit_test_helper.rb
controllers
models
functional
functional_test_helper.rb
controllers
models
将现有的功能测试移动到functional/controllers,并修改测试文件顶部的require行,以引入functional_test_helper.rb而不是test_helper.rb。
functional_test_helper.rb文件只需要引入test_helper.rb:
require File.dirname(__FILE__) + "/../test_helper"
对于单元测试的移动,建议将其移至unit/models,并断开单元测试与数据库的连接。任何失败的测试都应该修改为不访问数据库或移动到functional/models。
使用方法
在重构测试目录时创建的test/unit/unit_test_helper.rb文件中,添加以下代码:
require File.dirname(__FILE__) + "/../test_helper"
require "unit_record"
ActiveRecord::Base.disconnect!
disconnect!方法将执行所有必要操作,以在不连接数据库的情况下运行您的单元测试。
策略
如果您的代码尝试访问数据库,UnitRecord提供了两种策略:抛出异常或不执行任何操作(no-op)。抛出异常可以帮助您确定测试失败的原因,但可能不方便处理。
如果您希望抛出异常:
ActiveRecord::Base.disconnect! :strategy => :raise
如果您希望不执行任何操作:
ActiveRecord::Base.disconnect! :strategy => :noop
您还可以在块内更改策略:
ActiveRecord::Base.connection.change_strategy(:raise) do
Person.find(:all)
end
ActiveRecord::Base.connection.change_strategy(:noop) do
Person.find(:all)
end
关联存根
单元测试ActiveRecord类的一个痛点是设置关联。由于Rails在设置关联时进行类型检查,如果您尝试使用存根替换预期类,将会收到异常。
Pet.new :owner => stub("person")
如果使用mocha,可以启用UnitRecord进行关联存根。要启用关联存根功能:
ActiveRecord::Base.disconnect! :stub_associations => true
3. 项目API使用文档
UnitRecord主要提供了disconnect!方法,用于断开ActiveRecord与数据库的连接。该方法接受一个策略参数,用于定义当尝试访问数据库时应该采取的行为。
:raise:抛出异常:noop:不执行任何操作
此外,您可以使用change_strategy方法在块内临时更改策略。
4. 项目安装方式
如前所述,您可以通过Ruby的gem包管理器安装UnitRecord:
gem install unit_record
确保在您的Rails项目中包含UnitRecord,并在测试辅助文件中正确配置。
kernelopenEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。C0134
let_datasetLET数据集 基于全尺寸人形机器人 Kuavo 4 Pro 采集,涵盖多场景、多类型操作的真实世界多任务数据。面向机器人操作、移动与交互任务,支持真实环境下的可扩展机器人学习00
mindquantumMindQuantum is a general software library supporting the development of applications for quantum computation.Python059
PaddleOCR-VLPaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型,可实现精准的元素识别。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
AgentCPM-ReportAgentCPM-Report是由THUNLP、中国人民大学RUCBM和ModelBest联合开发的开源大语言模型智能体。它基于MiniCPM4.1 80亿参数基座模型构建,接收用户指令作为输入,可自主生成长篇报告。Python00