0

我有两个问题。第一个是基本的。MiniTest 是 UnitTest 的直接替代品。所以如果你在 rails 中使用生成器,你会得到一堆 ActiveSupport::TestCase 类。如果您使用 minitest(没有 minitest-spec-rails),那么您可以这样做

1.must_equal 1
# instead of 
assert_equal 1, 1

正确的?所以我很困惑为什么有一个 MiniTest::Unit::TestCase 类,如 railscast #327 (pro episode paywall sry)中所述。查看我实际使用的测试套件时会感到困惑。如果 minitest 是一个替代品,那么我正在使用 minitest 来执行 testunit 风格的 rails 测试。如果我把它拿出来,我正在使用 testunit 来运行 testunit 测试?

所以假设我正在使用 MiniTest 来运行 TestUnit 风格的测试。

require 'test_helper'
class FooTest < ActiveSupport::TestCase
end

在观看了 destroyallsoftware 关于提取域对象的截屏视频后,我受到了启发。他提出了一些关于避免加载 test_helper.rb 以加速测试套件而不使用 spork 诡计​​的好点(这正是我所做的)。但是,当我从上面给我 ActiveSupport::TestCase 时,我怎样才能避免加载 test_helper.rb 呢?

你不能用 MiniTest 或 TestUnit 提取域对象并将它们放入 lib/ 或 extras/ 中吗?

4

1 回答 1

2

您的第一个问题的答案是“不,不正确”。Minitest 不是 Test::Unit 的“替代品”。Minitest 为大多数 Test::Unit 提供了一个更简单的实现,但不是全部。在 Ruby 1.9 中,Test::Unit 库建立在 Minitest 的 TestCase 类之上,并填补了两个库之间的空白。

Minitest 提供了两种编写测试的模式:经典的 TestCase 方法和单独的 Spec DSL。与 Test::Unit 一样,Spec DSL 建立在 Minitest 的 TestCase 之上。因此,虽然 1.9 的 Test::Unit 和 Minitest 的 Spec DSL 都是基于 Minitest 的 TestCase 构建的,但您不能在 Test::Unit 中使用 Spec DSL,因为它不是其祖先的一部分。

第二个问题的答案是,如果你想使用 ActiveSupport::TestCase,你不能避免 test_helper.rb。您将需要 minitest/autorun 并让您的测试类继承自 MiniTest::Unit::TestCase。

于 2012-09-14T16:49:49.773 回答