我在通过端到端测试测试大型分布式系统时遇到以下情况:
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
更具体 - 它包含与大量测试相关的内容,但仍需要通过setup_runtime_environment
Class A
方法进行设置
Class C
是最具体的 - 它包含的内容仅与一小组测试相关,但仍需要通过setup_runtime_environment
问题在于,为了各种测试目的,运行时环境需要以不同的方式进行配置。测试与&#39; general&#39;测试与特定的&#39;测试,需要在之前配置进行初始化。
所以我可以将setup_runtime_environment
方法添加到每个块之前的末尾。但更理想的是在规范运行之前立即运行该方法。 A&#39; just_before&#39;块。有谁知道这样做的方法?
澄清:
如果我正在运行一个&#39;整体&#39; spec - 只从Class A
继承的一个,堆栈看起来像这样,假设&#39; A&#39;是Class A
中的前一个块和&#39; s&#39;是setup_runtime_environment
:
A -> s -> running of specs
同样,如果我正在运行一个特定的规范 - 一个继承自Class C
的规范,那么堆栈看起来应该是这样的:
A -> s -> B -> C -> running of specs
我想要&#39;在任何一个链的最后调用:
A -> s -> running of specs
或
A -> B -> s -> running of specs
或
A -> B -> C -> s -> running of specs
这就是我所说的&#39;就在&#39;之前 - 就像规格运行之前一样。
答案 0 :(得分:1)
由于规范DSL的行为,您受到限制。如果您想真正控制设置代码与继承设置一起运行的时间,则应使用测试样式setup
和super
。
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