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