ruby-on-rails - Unit::Test 与 Rspec 之间的区别

标签 ruby-on-rails unit-testing testing rspec tdd

<分区>

我对 Test::UnitRspec 很感兴趣。

有人可以向我解释一下两者之间的主要区别是什么 - 就它们的运作原则而言。

最佳答案

Test::Unit 更类似于 JUnit 等经典的 TDD 工具。测试以类的形式编写(因为这是在 Java/C++ 中完成的方式)。

Test::Unit 更适合那些习惯使用经典测试工具的人。

Test::Unit 已完全替换为 Minitest .

require_relative "simple_number"
require "test/unit"
 
class TestSimpleNumber < Test::Unit::TestCase
  def test_add
    assert_equal(4, SimpleNumber.new(2).add(2) )
  end
  def test_multiply
    assert_equal(6, SimpleNumber.new(2).multiply(3) )
  end
end

RSpec 是一种领域特定语言,它利用 ruby​​ 语言的灵 active 来创建“更具可读性”的测试。

早期版本的 RSpec 在这方面做得太过分了,并且对核心 Ruby 类进行了猴子修补。

RSpec 更倾向于行为驱动开发的哲学,在行为驱动开发中,您描述应用中组件的行为,而 TDD 则将应用分割成最小的组件。

require "spec_helper"
require "lib/simple_number"
     
describe SimpleNumber do 
  describe "#add" do
    it "adds a value to the sum" do
      expect(SimpleNumber.new(2).add(2)).to eq(4)
    end 
  end
  describe "#multiply" do
    it "multiplies with the value" do
      expect(SimpleNumber.new(2).multiply(3)).to eq(6)
    end 
  end
end

哪个更好?

见仁见智

Minitest 最近有所复苏,因为它被认为更快、更简单。然而,测试可能非常简洁,真正减慢套件速度的是集成测试和数据库 IO。

编写良好的 RSpec 测试套件(或规范套件)更具可读性和易于导航。当规范失败时,很容易将其与应用程序中实际出错的地方联系起来。当然也有很多套房正好相反。

Minitest 非常灵活,甚至可以与规范样式语法一起使用。它开箱即用非常稀疏,不包括丰富的断言库和像 RSpec 这样的模拟库。虽然您可以插入任何东西,但您仍然需要让所有事件部件协同工作。

RSpec 有更好的测试运行器和更好的文档。

关于ruby-on-rails - Unit::Test 与 Rspec 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33982619/

相关文章:

angular - 无法读取 null Angular 测试的属性 'textContent'

ruby-on-rails - 如何在 FactoryGirl 中使用从另一个 FactoryGirl 关联中延迟评估的值创建关联

ruby-on-rails - Rails + 延迟作业 : SSH connections pool

spring - 如何模拟 Spring WebFlux WebClient?

c# - 是否可以模拟数据库事务参数?

ios - 为 com.apple.dt.instruments 设置缓存目录

mysql - 在嵌套连接表上调用 uniq

ruby-on-rails - Rubymine 6 更新/刷新 rails 项目中的可用方法和路径?

c++ - c++ 单元测试的异常处理

node.js - 测试使用 Sequelize 和 Mocha/Expect/Supertest 的 Node.js API