我查看了几个相关问题及其答案,但似乎没有一个能完全解决我的问题。
我的单元测试通常由外部数据集进行数据驱动,以便于扩展和维护。我用各种输入来测试我的原语。举个例子,我有一个
#truthify
方法,根据特定规则(不是 Ruby 的常用规则)评估其参数。测试输入集不断扩大。
所以我有两个测试类,一个用于测试“true”参数是否被正确评估,一个用于“false”参数。每个类都会迭代其输入集并在循环中做出断言。然而,第一个失败的测试类会中止该测试类的处理。
这是我更简单的例子之一。
我上次使用
Test::Unit
(几年前),ISTR 有一种方法可以在不中止测试类的情况下报告每个失败的断言。
为每个测试值编写一个单独的测试类,即使我通过子类化来简化事情,也太笨重且难以维护,而且我觉得这也违反了 KISS 和 DRY。
如果在断言失败后无法告诉
Test::Unit
继续,是否有办法动态更改测试用例中的测试类列表?这样我至少可以根据外部数据集中的值动态添加所有这些单独的测试类。
一种在不中止测试类的情况下报告每个失败断言的方法
每个断言都必须在自己的测试方法中:
class MyTest < Test::Unit::TestCase
10.times do |i|
define_method "test_#{i}" do
assert false, "Assertion was false."
end
end
end
10 tests, 10 assertions, 10 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
0% passed
动态更改测试用例中测试类列表的方法
您可以根据需要选择性地索取文件:
# test/run.rb
require "test/unit"
# require whatever tests you want to run
require_relative "./my_test"
Test::Unit::AutoRunner.run
或来自命令行的正则表达式测试类:
$ ruby test/run.rb --testcase=/myte/i