RSpec中是否有类似于shared_examples的插件/扩展用于测试::单元测试?
发布于 2014-12-29 12:53:53
如果您正在使用rails (或仅使用active_support),请使用Concern。
require 'active_support/concern'
module SharedTests
extend ActiveSupport::Concern
included do
# This way, test name can be a string :)
test 'banana banana banana' do
assert true
end
end
end如果你没有使用active_support,那就使用Module#class_eval吧。
这项技术建立在Andy H.的答案之上,他指出:
单元测试就是
类,所以你可以使用普通的代码重用技术
但因为它支持使用ActiveSupport::Testing::Declarative#test,所以它的优点是不会耗尽下划线键:)
发布于 2013-02-09 06:19:48
我能够使用以下代码实现共享测试(类似于RSpec共享示例):
module SharedTests
def shared_test_for(test_name, &block)
@@shared_tests ||= {}
@@shared_tests[test_name] = block
end
def shared_test(test_name, scenario, *args)
define_method "test_#{test_name}_for_#{scenario}" do
instance_exec *args, &@@shared_tests[test_name]
end
end
end要在Test::Unit测试中定义和使用共享测试,请执行以下操作:
class BookTest < ActiveSupport::TestCase
extend SharedTests
shared_test_for "validate_presence" do |attr_name|
assert_false Books.new(valid_attrs.merge(attr_name => nil)).valid?
end
shared_test "validate_presence", 'foo', :foo
shared_test "validate_presence", 'bar', :bar
end发布于 2013-01-25 01:27:33
Ruby测试只是Ruby类,所以您可以使用与任何其他Test::Unit类相同的代码重用方法。
要编写共享示例,可以使用模块。
module SharedExamplesForAThing
def test_a_thing_does_something
...
end
end
class ThingTest < Test::Unit::TestCase
include SharedExamplesForAThing
endhttps://stackoverflow.com/questions/14507011
复制相似问题