【问题标题】:Difference between Unit::Test versus Rspec [closed]Unit::Test 与 Rspec 之间的区别 [关闭]
【发布时间】:2016-03-03 03:29:25
【问题描述】:

我对@9​​87654321@ 和Rspec 感兴趣。

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

【问题讨论】:

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


    【解决方案1】:

    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​​ 语言的灵活性来创建“更具可读性”的测试。

    早期版本的 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 具有更好的测试运行器和出色的文档。

    【讨论】:

    • 谢谢。这正是我一直在寻找的!当我在寻找文献时,我发现了大量描述如何编写测试的材料,但很少讨论这两种方法的理论基础。你给了我一个很好的起点,我可以从这里走得更远。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2013-01-04
    • 1970-01-01
    • 2012-03-28
    • 2011-12-12
    相关资源
    最近更新 更多