当我不久前决定学习 Ruby 时,我也决定开始使用单元测试和 TDD 方法。我开始使用 Test::Unit 并编写了几个非常小的类来感受一般的单元测试,特别是 Ruby 和 Test::Unit。
到目前为止,一切都很容易,但后来我想做一些类似于 nUnit 的 TestCase 的事情,因为我有 20 个测试,唯一改变的是输入和输出。
代码如下所示:
def test_2_inserted_return_true
actual = @prime_generator.is_prime?(2)
assert_equal(true, actual)
end
def test_3_inserted_return_true
actual = @prime_generator.is_prime?(3)
assert_equal(true, actual)
end
def test_5_inserted_return_true
actual = @prime_generator.is_prime?(5)
assert_equal(true, actual)
end
从 DRY 的角度来看,这是非常可怕的。我想要的是类似于 nUnit 的 TestCase 的东西。
像这样的东西:
[TestCase(2.5d, 2d, Result=1.25d)]
[TestCase(-2.5d, 1d, Result = -2.5d)]
public double ValidateDivision(double numerator, double denominator)
{
var myClass = new MyClass();
return myClass.Divide(numerator,denominator);
}
我试过谷歌搜索,但找不到任何关于 Test::Unit 的信息。我在 RSpec 和 Selenium 上找到了一些,但这并没有真正帮助我。我也尝试在这里搜索,但也找不到任何东西。
我想过让测试方法接受参数,但又像那样定义方法......对此并不满意。此外,如果我没记错的话,那甚至是不可能的(我现在无法测试,或者我会)。
所以,我的问题是:是否可以在 Ruby (1.9.2) 中使用 Test::Unit 进行数据驱动测试?如果没有,那么什么框架可以做到这一点?