gpt4 book ai didi

ruby - 有没有什么好的ruby测试溯源方案?

转载 作者:太空宇宙 更新时间:2023-11-03 16:09:21 24 4
gpt4 key购买 nike

我正在编写一些 ruby​​(不是 Rails)并使用 test/unit 和 shoulda 来编写测试。

是否有任何 gem 可以让我实现从测试到设计/需求的可追溯性?

即:我想用他们测试的需求的名称来标记我的测试,然后生成未测试或测试失败的需求报告等。

希望这对 ruby​​ 来说不是太企业化。

谢谢!

最佳答案

更新:此解决方案可作为 gem 使用:http://rubygems.org/gems/test4requirements

Are there any gems that'll allow me to implement traceability from my tests back to designs/requirements?

我不知道任何 gem ,但你需要的是一个小实验的灵感,它是如何解决的。

  • 您必须使用 RequirementList.new(1,2,3,4) 定义您的需求
  • 可以在测试用例中用要求分配此要求
  • 每个测试都可以分配给带有requirement的需求
  • 在测试结果之后,您可以大致了解哪些需求已被测试(成功)

现在是示例:

gem 'test-unit'
require 'test/unit'

###########
# This should be a gem
###########

class Test::Unit::TestCase
def self.requirements(req)
@@requirements = req
end
def requirement(req)
raise RuntimeError, "No requirements defined for #{self}" unless defined? @@requirements
caller.first =~ /:\d+:in `(.*)'/
@@requirements.add_test(req, "#{self.class}##{$1}")
end
alias :run_test_old :run_test
def run_test
run_test_old
#this code is left if a problem occured.
#in other words: if we reach this place, then the test was sucesfull
if defined? @@requirements
@@requirements.test_successfull("#{self.class}##{@method_name}")
end
end
end

class RequirementList
def initialize( *reqs )
@requirements = reqs
@tests = {}
@success = {}

#Yes, we need two at_exit.
#tests are done also at_exit. With double at_exit, we are after that.
#Maybe better to be added later.
at_exit {
at_exit do
self.overview
end
}

end
def add_test(key, loc)
#fixme check duplicates
@tests[key] = loc
end
def test_successfull(loc)
#fixme check duplicates
@success[loc] = true
end
def overview()
puts "Requirements overiew"
@requirements.each{|req|
if @tests[req] #test defined
if @success[@tests[req]]
puts "Requirement #{req} was tested in #{@tests[req] }"
else
puts "Requirement #{req} was unsuccessfull tested in #{@tests[req] }"
end
else
puts "Requirement #{req} was not tested"
end
}
end
end #RequirementList

###############
## Here the gem end. The test will come.
###############

$req = RequirementList.new(1,2,3, 4)

class MyTest < Test::Unit::TestCase
#Following requirements exist, and must be tested sucessfull
requirements $req

def test_1()
requirement(1) #this test is testing requirement 1
assert_equal(2,1+1)
end
def test_2()
requirement(2)
assert_equal(3,1+1)
end
def test_3()
#no assignment to requirement 3
pend 'pend'
end
end


class MyTest_4 < Test::Unit::TestCase
#Following requirements exist, and must be tested sucessfull
requirements $req

def test_4()
requirement(4) #this test is testing requirement 4
assert_equal(2,1+1)
end
end

结果:

Loaded suite testing_traceability_solutions
Started
.FP.

1) Failure:
test_2(MyTest)
[testing_traceability_solutions.rb:89:in `test_2'
testing_traceability_solutions.rb:24:in `run_test']:
<3> expected but was
<2>.

2) Pending: pend
test_3(MyTest)
testing_traceability_solutions.rb:92:in `test_3'
testing_traceability_solutions.rb:24:in `run_test'

Finished in 0.65625 seconds.

4 tests, 3 assertions, 1 failures, 0 errors, 1 pendings, 0 omissions, 0 notifications
50% passed
Requirements overview:
Requirement 1 was tested in MyTest#test_1
Requirement 2 was unsuccessfull tested in MyTest#test_2
Requirement 3 was not tested
Requirement 4 was tested in MyTest_4#test_4

如果您认为这可能是您的解决方案,请给我反馈。然后我会尝试用它来构建一个 gem。


与 shoulda 一起使用的代码示例

#~ require 'test4requirements' ###does not exist/use code above
require 'shoulda'
#use another interface ##not implemented###
#~ $req = Requirement.new_from_file('requirments.txt')

class MyTest_shoulda < Test::Unit::TestCase
#Following requirements exist, and must be tested sucessfull
#~ requirements $req

context 'req. of customer X' do
#Add requirement as parameter of should
# does not work yet
should 'fullfill request 1', requirement: 1 do
assert_equal(2,1+1)
end
#add requirement via requirement command
#works already
should 'fullfill request 1' do
requirement(1) #this test is testing requirement 1
assert_equal(2,1+1)
end
end #context
end #MyTest_shoulda

关于ruby - 有没有什么好的ruby测试溯源方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6958586/

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