使用 minitest 进行多次测试

发布于 2024-12-04 23:07:35 字数 335 浏览 1 评论 0原文

我有一个应用程序,其中一些规格写入 minitest 中。像往常一样,我使用 rake 启动它们。

因为有时我得到的是随机结果,所以我的规格可能一次通过,另一次失败。

在这种情况下,我可以保留序列号并在修复后稍后重播。 因为我有这种测试(随机结果),所以我通常运行 rake 多次,只是为了确保应用程序没问题。

我想知道是否有一种很好的方法来执行多次 rake 测试(例如 100 次),并在出现任何失败或错误时停止它们?

I have an app with some specs written into minitest. As usual, I start them using rake.

Because some times I got a random results, my specs can pass one time, and fail an other time.

In this case, I can keep the sequence number and replay it later, after fixing.
Because I have this kind of tests (with a random result), I generally run rake many time, just to be sure that the app is okay.

I would like to know if there is a nice way to perform multiple rake tests (100 times for example), and stop them if there any failure or any error?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

◇流星雨 2024-12-11 23:07:35

我认为你应该重新考虑你的测试,而不是测试通话。随机结果的测试对我来说看起来是错误的。

你的测试中的随机因素是什么?您可以为随机因子编写一个模拟元素,并使用模拟元素的不同值重复测试吗?这样你就得到了一个“完整”的测试。

I think you should think again about your test, not about the test call. A test with a random result looks wrong for me.

What's the random factor in your test? Can you write a mock-element for the random factor and repeat the test with different values for the mock-element. So you get a "complete" test.

眼角的笑意。 2024-12-11 23:07:35

我创建了一个具有随机结果的虚拟测试来模拟您的情况:

#store it as file 'testcase.rb'
gem 'test-unit'
require 'test/unit'

class X < Test::Unit::TestCase
  def test_1
    num = rand(10) 
    assert_true( num < 5, "Value is #{num}")
  end
end 

以下任务调用测试 10 次,并在第一次失败后停止:

TEST_REPETION = 10
task :test do
  TEST_REPETION.times{
    stdout = `ruby testcase.rb`

    if stdout =~ /\d+\) Failure/
      puts "Failure occured"
      puts stdout
      exit
    else
      puts 'Tests ok'
    end
  }
end

对于实际使用,我将调整一些部分:

  • 而不是 puts 'Tests ok'定义一个计数器来查看测试成功的频率。
  • 相反,您可以将结果存储在结果文件中?

I created a dummy test with random result to simulate your situation:

#store it as file 'testcase.rb'
gem 'test-unit'
require 'test/unit'

class X < Test::Unit::TestCase
  def test_1
    num = rand(10) 
    assert_true( num < 5, "Value is #{num}")
  end
end 

The following task calls the test 10 times and stops after the first failure:

TEST_REPETION = 10
task :test do
  TEST_REPETION.times{
    stdout = `ruby testcase.rb`

    if stdout =~ /\d+\) Failure/
      puts "Failure occured"
      puts stdout
      exit
    else
      puts 'Tests ok'
    end
  }
end

For real usage I would adapt some parts:

  • Instead puts 'Tests ok' define a counter to see how often the test was succussfull
  • Instead puts stdoutyou may store the result in a result file?
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文