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

View File

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

View File

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