gpt4 book ai didi

ruby - 我如何在 Ruby 中继承抽象单元测试?

转载 作者:数据小太阳 更新时间:2023-10-29 08:21:41 26 4
gpt4 key购买 nike

我有两个单元测试,它们应该共享许多常见测试,但设置方法略有不同。如果我写类似的东西

class Abstract < Test::Unit::TestCase
def setup
@field = create
end

def test_1
...
end
end

class Concrete1 < Abstract
def create
SomeClass1.new
end
end

class Concrete2 < Abstract
def create
SomeClass2.new
end
end

然后 Concrete1 似乎没有继承 Abstract 的测试。或者至少我不能让他们在 eclipse 中运行。如果我为包含 Concrete1 的文件选择“运行所有测试用例”,那么即使我不希望它运行,也会运行 Abstract。如果我指定 Concrete1 那么它根本不会运行任何测试!如果我在 Concrete1 中指定 test_1,那么它会提示找不到它(“未捕获的抛出:invalid_test(ArgumentError)”)。

我是 Ruby 新手。我在这里缺少什么?

最佳答案

问题是,据我所知,Test::Unit跟踪哪些类继承自 Test::Unit::TestCase ,因此,将直接继承自它的类运行测试。

解决这个问题的方法是创建一个包含所需测试的模块,然后包含该模块到派生自 Test::Unit::TestCase 的类中.

require 'test/unit'

module TestsToInclude
def test_name
assert(self.class.name.start_with?("Concrete"))
end
end

class Concrete1 < Test::Unit::TestCase
include TestsToInclude

def test_something_bad
assert(false)
end
end

class Concrete2 < Test::Unit::TestCase
include TestsToInclude

def test_something_good
assert(true)
end
end

输出:

Loaded suite aStarted.F..Finished in 0.027873 seconds.  1) Failure:test_something_bad(Concrete1) [a.rb:13]:<false> is not true.4 tests, 4 assertions, 1 failures, 0 errorsshell returned 1

关于ruby - 我如何在 Ruby 中继承抽象单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2564050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com