我想为我当前的项目编写一些测试。
这些测试主要与数据库中保存的数据有关。
例如:
如果用户注册7
年前,请提供gold badge
(布尔值
字段设置为true)
如果在3
年前注册,则bronze badge
等
好吧,在布尔字段设置为true之前,计算有点复杂。我需要测试大约30-40
个测试用例,它们与上面两个例子非常相似。
我做了一些关于 Rails 测试的阅读,但我无法弄清楚 Rails 中的集成,单元和功能测试之间的确切区别。
在我的情况下哪种测试方法合适?
答案 0 :(得分:0)
我认为这取决于你如何实现它。
如果您正在使用cronjob来检查用户徽章,那么集成测试会很好,可以测试整个作业的入口和内容。
如果您在用户登录时进行更新,则可以使用模型(单元)测试。 例如:
class UserTest < ActiveSupport::TestCase
test "users badge is updated on login if needed" do
user = User.create ... , golden_badge: false
travel_to Time.now + 7.years do
# simulate login, something like: user.login(user: "", pass: "")
assert user.golden_badge
end
end
end
此测试将在test/models/user_test.rb
答案 1 :(得分:0)
这取决于执行更新此字段的代码的确切位置。例如,如果您在用户模型本身的用户更新中检查这些“奖励”,如下所示:
class User < ActiveRecord::Base
before_save :check_rewards
def check_rewards
self.update(golden_badge: true) if created_at > 5.years.ago
end
然后测试只需要在models / user_spec.rb中进行,这是一个单元测试。
如果代码每小时作为一个cron作业运行,它在一个名为check_rewards.rb的文件中使用了一个可能属于两个地方的方法。
首先,在services / check_rewards.rb(或者命令/ check_rewards.rb或任何目录)中进行更新的对象的'单元'测试正在测试实际功能,就像上面的用户规范代码一样。< / p>
最后,您应该在integration / check_rewards_spec.rb中进行集成测试,以确保您正在使用的作业管理器按预期工作,以便作业本身实际运行并具有预期的行为。
答案 2 :(得分:0)
单元测试:用于测试最小的代码单元。对于特定功能。就像在控制器中进行CRUD操作测试一样。每个动作都将单独测试单元测试。
集成测试:用于测试一组功能或模块。考虑是否要查看简单用户可以看到的内容以及用户在网站中可以看到的内容。因此,在这两种情况下,您都需要先测试登录功能,然后再测试特定的功能。
功能测试完全不同。在此您可以测试模块或模块组合。它更像是集成测试。
Unit tests tell a developer that the code is doing things right; functional tests tell a developer that the code is doing the right things.
了解更多here
在我看来,你应该去进行功能测试。