【问题标题】:how to call a method immediately before the start of a test run in minitest如何在 minitest 中的测试运行开始之前立即调用方法
【发布时间】:2014-11-18 10:21:53
【问题描述】:

在通过端到端测试测试大型分布式系统时,我有以下场景:

Class A < Minitest::Spec

  before do 
    # stuff

    setup_runtime_environment
  end

end

Class B < Class A

  before do 
    # stuff
  end

end

Class C < Class B

  before do 
    # stuff
  end

end

某些测试仅继承自 Class A - 它是最通用的,包括与测试整个系统相关的内容。

Class B 更具体 - 它包括与大量测试相关的内容,但仍需要通过Class A 中的setup_runtime_environment 方法设置

Class C 是最具体的 - 它包含仅与一小部分测试相关的内容,但仍需要通过 Class A 中的 setup_runtime_environment 方法设置

问题在于,运行时环境,出于各种测试目的,在运行“整体”测试、“一般”测试和“特定”测试时需要进行不同的配置,并且需要在之前进行配置 它被初始化。

所以我可以将 setup_runtime_environment 方法添加到每个 before 块的末尾。但更理想的方法是在运行规范之前立即运行该方法。一个“just_before”块。有谁知道这样做的方法吗?

澄清一下:

如果我正在运行“整体”规范 - 仅从 Class A 继承的规范,堆栈看起来像这样,假设“A”是 Class A 中的前块,“s”是 setup_runtime_environment

A -> s -> running of specs

同样,如果我正在运行特定规范 - 继承自 Class C 的规范,堆栈将如下所示:

A -> s -> B -> C -> running of specs

我希望在任何链的最后调用“s”:

A -> s -> running of specs  

A -> B -> s -> running of specs  

A -> B -> C -> s -> running of specs  

这就是我所说的“就在之前”——就像在规范运行之前一样。

【问题讨论】:

  • 我不确定您所说的“之前”是什么意思。 AFAIK,beforeis 在每次测试之前运行(如Minitest::Test 中的setup 方法)。
  • 对不起,我意识到这有点令人困惑。我将编辑原始帖子。

标签: ruby unit-testing minitest


【解决方案1】:

由于规范 DSL 的行为,您受到了限制。如果你想真正控制你的设置代码何时与继承的设置一起运行,你应该使用测试风格的setupsuper

Class A < Minitest::Spec

  def setup
    # do stuff
    setup_runtime_environment
  end

end

Class B < Class A

  def setup
    super
    # do stuff after setup_runtime_environment
  end

end

Class C < Class B

  def setup
    # do stuff before setup_runtime_environment
    super
  end

end

【讨论】:

  • 这听起来很有希望 - 也许你知道你在说什么;)我会在我尝试后明天检查它。
猜你喜欢
  • 2012-01-04
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
  • 2020-02-09
  • 2016-11-02
  • 2020-01-02
相关资源
最近更新 更多