如何在单元测试中重新加载模型类

Posted

技术标签:

【中文标题】如何在单元测试中重新加载模型类【英文标题】:How to reload model class in a unit test 【发布时间】:2011-09-18 22:35:19 【问题描述】:

如何在单元测试中重新加载 ActiveRecord 模型类? (在 Ruby on Rails 版本 1.2.6 中)

我有一个单独运行时运行良好的单元测试,例如rake test:recent RAILS_ENV=test

当与所有其他单元测试一起运行时,单元测试将失败,例如rake test:units RAILS_ENV=test

失败的单元测试与其他模型有很多 ActiveRecord 关系...在我运行失败的单元测试之前需要重新加载模型。我该怎么做?

更新

我找到了一种解决断言失败的方法,而无需重新加载我的数据模型。测试现在可以单独或一起运行。

【问题讨论】:

我对使用reload 也有同样的好奇心。您找到的解决方法是什么? @normalocity 我不太记得了,但基本上我必须在我的工厂设置上做额外的工作,而我不必在开发/生产环境中做这些工作。我的模型中的一些类方法缓存了它们的结果,并且没有反映对数据库的更改。 【参考方案1】:

首先你不应该在你的测试中有这样的依赖,所以这可能是一个错误。有时您可能需要在测试中重新加载模型,但每个测试都应该完全独立,并且应该使系统处于可接受的一致状态。

默认情况下用于单元测试的事务系统应该恢复您对记录所做的任何更改,因此您不应该在不同的测试方法之间共享数据。

您认为您正在做的事情是否有问题?

【讨论】:

你是对的。重新加载模型(即使我确实知道如何去做)是错误的方法。我想我找到了解决问题原因的更好方法,并且不需要重新加载任何模型。

以上是关于如何在单元测试中重新加载模型类的主要内容,如果未能解决你的问题,请参考以下文章

单元测试 - 什么双(演员)是实体(模型类)?

编辑并重新运行 Spring Boot 单元测试,无需重新加载上下文以加快测试速度

NestJS如何在单元测试中创建新的猫鼬模型?

如何对 ASP.NET Core 控制器或模型对象进行单元测试?

如何对我的 WCF 客户端类进行单元测试?

加载本机库的单元测试 Java 类