Minitest测试中示例间实例变量值无法传递问题求助
问题原因与解决办法
嘿,这其实是Minitest的设计特性导致的——每个it块(也就是你说的example)都会对应一个全新的测试类实例!
为啥会出现这个问题?
当你在example 1里给@variable赋值时,这个变量只属于当前这个测试实例,等example 1执行完毕,这个实例就被销毁了。到example 2运行时,Minitest会重新创建一个GeographicLocationTest的实例,这个新实例里的@variable完全是未初始化的状态,自然就是空的啦。
怎么解决?
如果需要在多个测试用例间共享初始化的数据,推荐使用Minitest的setup方法——它会在每个it块执行之前自动运行,帮你初始化需要的实例变量:
class GeographicLocationTest < Minitest::Test describe "geographic location" do # 每个it执行前都会运行这个setup方法 setup do @variable = "Sample variable" end it "example 1" do # 这里可以直接使用@variable assert_equal "Sample variable", @variable end it "example 2" do puts "string" puts @variable # 现在就能输出"Sample variable"啦 end end end
另外提一句,Minitest刻意让每个测试独立,是为了避免测试间互相影响,保证每个测试的结果都是可靠的,所以尽量别用类变量这类全局共享的方式哦,容易导致测试污染。
内容的提问来源于stack exchange,提问作者Velusamy Venkatraman
相关产品推荐
相关产品推荐

