add 'time=n.nnn' attribute in JUnit output

This commit is contained in:
Johan Holmberg 2016-11-28 13:21:21 +01:00
parent 93519ab612
commit 5c84e04a51
2 changed files with 35 additions and 18 deletions

@ -49,9 +49,10 @@ module Cmdtest
class Testcase
def write(f)
f.put ' <testcase classname="%s" name="%s"/>', [
f.put ' <testcase classname="%s" name="%s" time="%.3f"/>', [
@classname,
@name,
@duration,
]
end
end
@ -60,7 +61,8 @@ module Cmdtest
class OkTestcase < Testcase
def initialize(classname, name)
def initialize(duration, classname, name)
@duration = duration
@classname = classname
@name = name
@message = @type = @text = nil
@ -72,7 +74,8 @@ module Cmdtest
class ProblemTestcase < Testcase
def initialize(classname, name, message, type, text)
def initialize(duration, classname, name, message, type, text)
@duration = duration
@classname = classname
@name = name
@message = message
@ -81,9 +84,10 @@ module Cmdtest
end
def write(f)
f.put ' <testcase classname="%s" name="%s">', [
f.put ' <testcase classname="%s" name="%s" time="%.3f">', [
@classname,
@name,
@duration,
]
f.put ' <%s message="%s" type="%s">%s</%s>', [
xml_tag,
@ -114,37 +118,41 @@ module Cmdtest
class Testsuite
attr_accessor :duration
def initialize(package, name)
@package = package
@name = name
@testcases = []
@duration = 0.0
end
def ok_testcase(classname, name)
testcase = OkTestcase.new(classname, name)
def ok_testcase(duration, classname, name)
testcase = OkTestcase.new(duration, classname, name)
@testcases << testcase
testcase
end
def err_testcase(classname, name, message, type, text)
testcase = ErrTestcase.new(classname, name, message, type, text)
def err_testcase(duration, classname, name, message, type, text)
testcase = ErrTestcase.new(duration, classname, name, message, type, text)
@testcases << testcase
testcase
end
def skip_testcase(classname, name, message, type, text)
testcase = SkipTestcase.new(classname, name, message, type, text)
def skip_testcase(duration, classname, name, message, type, text)
testcase = SkipTestcase.new(duration, classname, name, message, type, text)
@testcases << testcase
testcase
end
def write(f)
f.put ' <testsuite errors="%d" failures="%d" skipped="%d" name="%s" tests="%d" package="%s">', [
f.put ' <testsuite errors="%d" failures="%d" skipped="%d" name="%s" tests="%d" time="%.3f" package="%s">', [
0,
@testcases.grep(ErrTestcase).size,
@testcases.grep(SkipTestcase).size,
@name,
@testcases.size,
@duration,
@package,
]
for testcase in @testcases
@ -184,13 +192,13 @@ end
if $0 == __FILE__
jf = Cmdtest::JunitFile.new("jh.xml")
ts = jf.new_testsuite("foo")
ts.ok_testcase("jh.Foo", "test_a")
ts.ok_testcase("jh.Foo", "test_b")
ts.ok_testcase(1.0, "jh.Foo", "test_a")
ts.ok_testcase(1.0, "jh.Foo", "test_b")
ts.err_testcase("jh.Foo", "test_c", "2 > 1", "assert", "111\n222\n333\n")
ts.err_testcase(1.0, "jh.Foo", "test_c", "2 > 1", "assert", "111\n222\n333\n")
ts = jf.new_testsuite("bar")
ts.ok_testcase("jh.Bar", "test_x")
ts.ok_testcase(1.0, "jh.Bar", "test_x")
jf.write
end

@ -35,28 +35,37 @@ module Cmdtest
end
def testclass_begin(testcase_class_name)
@testclass_t1 = Time.now
@testcase_class_name = testcase_class_name
@ts = @jf.new_testsuite("CMDTEST", testcase_class_name)
end
def testclass_end(testcase_class_name)
@testclass_t2 = Time.now
@ts.duration = @testclass_t2 - @testclass_t1
end
def testmethod_begin(method)
@err_assertions = []
@err_skip = nil
@t1 = Time.now
end
def testmethod_end(method)
@t2 = Time.now
@duration = @t2 - @t1
if @err_skip != nil
message = @err_skip.split(/\n/)[0]
type = "skip"
text = @err_skip
@ts.skip_testcase(_xml_class, method, message, type, text)
@ts.skip_testcase(@duration, _xml_class, method, message, type, text)
elsif @err_assertions.size > 0
message = @err_assertions[0].split(/\n/)[0]
type = "assert"
text = @err_assertions.join
@ts.err_testcase(_xml_class, method, message, type, text)
@ts.err_testcase(@duration, _xml_class, method, message, type, text)
else
@ts.ok_testcase(_xml_class, method)
@ts.ok_testcase(@duration, _xml_class, method)
end
end