-->

如何组织MINITEST /单元测试?(How to organize minitest/unit

2019-08-06 08:08发布

使用RSpec的几个项目后,我给MINITEST /单元一展身手。 我喜欢它,到目前为止,但我想念使用描述/上下文块组我的测试/规格以逻辑方式。

我知道MINITEST /规范提供了这一功能,但我喜欢MINITEST /单元的感觉有点接近准系统红宝石。

是否有提供描述任何宝石/ MINITEST为/单位方面的支持? 或者,我应该只是在MINITEST /单位我长的,无组织的测试文件住在哪里?

Answer 1:

我知道几个人从RSpec的来MINITEST同样的问题挣扎。 他们喜欢用描述/上下文块,并希望继续在MINITEST的能力窝。 有几种解决方案:

  1. 使用MINITEST的规格DSL:虽然有细微的差别,规范DSL为您提供最(全部?)RSpec的DSL的好的部分。 最大的区别是缺乏的context块。 但是你可以很容易的使用describe在其位,一切都会按你所期望的。
  2. 使用目录和文件:我喜欢这个选项。 我不喜欢用300线测试文件滚动,而不管其是否使用规范DSL或古典风格的xUnit。 我不觉得嵌套无关的测试很有帮助。 修真代码相同的规则适用于测试。 因此,打破它。 创建一个目录,并把它包含几个文件。

这里是我的测试文件是如何组织的一个例子:

test/
     models/
            user/
                 authentication_test.rb
                 email_test.rb
                 reservation_test.rb
                 user_test.rb
                 username_test.rb

我用这个结构我是否使用规范DSL或xUnit的风格。 当使用规范DSL我指定我在我的描述块正在测试,如下所示:

require "minitest_helper"

describe User, :authentications do

  before do
    # ...


Answer 2:

您也可以抛出多个类到一个测试文件:

module PizzaTest
  class Isolation < ActiveSupport::TestCase
    test "is awesome by default" do
      assert Pizza.new.awesome?
    end
  end

  class Integration < ActiveSupport::TestCase
    fixtures :all

    test "is awesome too" do
      pizzas('one-with-everything').awesome?
    end
  end
end

甚至巢测试类:

class PizzaTest < ActiveSupport::TestCase
  test "is awesome by default" do
    assert Pizza.new.awesome?
  end

  class Integration < ActiveSupport::TestCase
    fixtures :all

    test "is awesome too" do
      assert pizzas('one-with-everything').awesome?
    end
  end
end


Answer 3:

我喜欢这种方式(只有一点点),但我认为它更容易跟踪:

class ConventionalNameTest < ActiveSupport::TestCase
  class ContextTest < ConventionalNameTest
    # so much stuff...
  end
  class AnotherContextTest < ConventionalNameTest
    # and some more...
  end


文章来源: How to organize minitest/unit tests?