class Test::Unit::UI::TestRunnerMediator
提供一个接口来编写任何给定的 UI
,希望能够方便地编写新的 UI。
常量
- FINISHED
- RESET
- STARTED
公共类方法
new(suite, options={}) 点击切换源代码
创建一个新的 TestRunnerMediator
,初始化以运行传入的套件。
# File test-unit-3.6.7/lib/test/unit/ui/testrunnermediator.rb, line 25 def initialize(suite, options={}) @suite = suite @options = options @test_suite_runner_class = @options[:test_suite_runner_class] @test_suite_runner_class ||= TestSuiteRunner end
公共实例方法
run() 点击切换源代码
运行创建 TestRunnerMediator
时使用的套件。
# File test-unit-3.6.7/lib/test/unit/ui/testrunnermediator.rb, line 34 def run AutoRunner.need_auto_run = false result = create_result Test::Unit.run_at_start_hooks start_time = Time.now begin with_listener(result) do @test_suite_runner_class.run_all_tests do catch do |stop_tag| result.stop_tag = stop_tag notify_listeners(RESET, @suite.size) notify_listeners(STARTED, result) run_suite(result) end end end ensure elapsed_time = Time.now - start_time notify_listeners(FINISHED, elapsed_time) end Test::Unit.run_at_exit_hooks result end
run_suite(result=nil) 点击切换源代码
仅用于 NetBeans 的向后兼容性。NetBeans 不应使用猴子补丁。NetBeans 应该使用 runner 更改公共 API。
参见 GitHub#38
https://github.com/test-unit/test-unit/issues/38
# File test-unit-3.6.7/lib/test/unit/ui/testrunnermediator.rb, line 68 def run_suite(result=nil) if result.nil? run else @suite.run(result, runner_class: @test_suite_runner_class) do |channel, value| notify_listeners(channel, value) end end end
私有实例方法
create_result() 点击切换源代码
一个工厂方法,用于创建 mediator 应该使用的结果。如果想使用不同的结果,子类可以重写此方法。
# File test-unit-3.6.7/lib/test/unit/ui/testrunnermediator.rb, line 82 def create_result TestResult.new end
measure_time() { || ... } 点击切换源代码
# File test-unit-3.6.7/lib/test/unit/ui/testrunnermediator.rb, line 86 def measure_time begin_time = Time.now yield Time.now - begin_time end
with_listener(result) { || ... } 点击切换源代码
# File test-unit-3.6.7/lib/test/unit/ui/testrunnermediator.rb, line 92 def with_listener(result) finished_listener = result.add_listener(TestResult::FINISHED) do |*args| notify_listeners(TestResult::FINISHED, *args) end changed_listener = result.add_listener(TestResult::CHANGED) do |*args| notify_listeners(TestResult::CHANGED, *args) end pass_assertion_listener = result.add_listener(TestResult::PASS_ASSERTION) do |*args| notify_listeners(TestResult::PASS_ASSERTION, *args) end fault_listener = result.add_listener(TestResult::FAULT) do |*args| notify_listeners(TestResult::FAULT, *args) end begin yield ensure result.remove_listener(TestResult::FAULT, fault_listener) result.remove_listener(TestResult::CHANGED, changed_listener) result.remove_listener(TestResult::FINISHED, finished_listener) result.remove_listener(TestResult::PASS_ASSERTION, pass_assertion_listener) end end