带有 jruby rake 测试任务的 MiniTest falis

Posted

技术标签:

【中文标题】带有 jruby rake 测试任务的 MiniTest falis【英文标题】:MiniTest falis with jruby rake test task 【发布时间】:2014-08-22 13:25:34 【问题描述】:

我有一个在 jruby 中使用自写 gem 的项目(使用 rvm 在 jruby 之间切换)。使用 jruby-1.7.0,我可以使用 Test::Unit::TestCase 进行测试。现在我已经切换到 jruby-1.7.13 中的 MiniTest。但是我不能再用“rake test”运行我的测试了。

错误类似于 ... Mocha::ExpectationError: unexpected invocation: blabla.new() ... with blabla beeeing my jruby class

仅当我仅通过 TEST= 和 TESTOPTS= 参数运行它们以使用单个测试文件并通过 --name= (使用正则表达式)选择一个或一个视图测试时,它才有效。

我使用了一个帮助文件

require 'minitest/spec'
require 'minitest/autorun'
require 'mocha/integration'

class MiniTest::Test
end

而不是用于旧测试套件 Test::Unit::TestCase 的行

require 'test/unit'
require 'shoulda'
require 'mocha'

class Test::Unit::TestCase
end

MiniTest 的主要区别在于测试顺序。所以我试图通过定义 test_order 来规避随机化

class MiniTest::Test
  def test_order
    :alpha
  end
end

这对测试顺序没有影响,但这真的有问题吗?这些错误似乎也伴随着测试套件中的测试。这是一个错误吗?请帮忙!

您也可以查看 require self made gem in jruby fails after update to jruby-1.7.13 对于我已经可以解决负载问题的重要帖子。

【问题讨论】:

您应该尝试隔离一个示例代码来重现这个(从您的“自己的”宝石中)......否则很难回答。您还可以尝试许多选项 - 1.7.0 上的 MiniTest、MRI 行为、更新 Mocha(下次请至少包含您正在使用的库的版本 - 和/或简单地提供回溯) jruby-1.7.0 上的 MiniTest 会导致同样的问题。摩卡上下评级没有帮助。你对 MIR 行为是什么意思?我也使用 jirb 控制台进行测试。我现在将尝试使用纯 ruby​​ 1.9.3 来检查 java 影响。不过明天会做。 【参考方案1】:

这是一些代码

require File.dirname(__FILE__) + "/../helper.rb"
require 'command/flow_control_command'
## --seed=36725
module Command
 class TestFlowControlCommand < MiniTest::Test
 def setup
  fcp = Configuration::FlowControlParameter.last
  fcp.number_ports = 16
  fcp.save!
 end
 def test_should_exist
  assert FlowControlCommand
 end
 def test_should_initialize
  FlowControlCommand.expects(:new).with("modbus").returns(true)
  assert FlowControlCommand.new("modbus")
 end
 def test_should_have_constants
  assert_equal [0,0,0,0, 0,0,0,0,  0,0,0,0, 0,0,0,0,  0,0,0,0, 0,0,0,0,  0,0,0,0, 0,0,0,0], FlowControlCommand::CIRCLE
 end
 def test_should_find_line_1
  result = FlowControlCommand.new("modbus").find_line [1,0,0,0, 0,0,0,0,  0,0,0,0, 0,0,0,0,  1,1,0,0, 0,0]
  assert_equal "LINE1", result
 end
 def test_should_not_find_line
  result = FlowControlCommand.new("modbus").find_line [0,0,0,0, 0,0,0,0,  0,0,0,0, 0,0,0,0,  1,1,0,0, 0,0]
  assert_equal "LINE?", result
  result = FlowControlCommand.new("modbus").find_line [1,1,0,0, 0,0,0,0,  0,0,0,0, 0,0,0,0,  1,1,0,0, 0,0]
  assert_equal "LINE?", result
 end
 def test_should_find_line_16
  result = FlowControlCommand.new("modbus").find_line [0,0,0,0, 0,0,0,0,  0,0,0,0, 0,0,0,1,  1,1,0,0, 0,0]
  assert_equal "LINE16", result
 end
 def test_should_find_line_13
  result = FlowControlCommand.new("modbus").find_line [0,0,0,0, 0,0,0,0,  0,0,0,0, 1,0,0,0,  1,1,0,0, 0,0]
  assert_equal "LINE13", result
 end

  + some more tests

运行这个会导致

跑步:

.....EEEEE.EEE.

在 1.036000 秒、14.4788 次运行/秒、2.8958 次断言/秒内完成。

1) 错误: 命令::TestFlowControlCommand#test_should_find_line_circle: Mocha::ExpectationError: 意外调用:Command::FlowControlCommand.new('modbus') 未满足的期望: - 只期望一次,调用两次:Command::FlowControlCommand.new('modbus')

/home/frank/Rubymineprojects/ndir_med1/dibta-model/test/command/test_flow_control_command.rb:61:in `test_should_find_line_circle'

2) 错误: 命令::TestFlowControlCommand#test_should_find_line_14: Mocha::ExpectationError: 意外调用:Command::FlowControlCommand.new('modbus') 未满足的期望: - 预计只有一次,调用 3 次:Command::FlowControlCommand.new('modbus')

/home/frank/Rubymineprojects/ndir_med1/dibta-model/test/command/test_flow_control_command.rb:46:in `test_should_find_line_14'

如果我逐个运行测试,则不会发生错误,如果我使用特定的种子参数运行,测试也会运行。

【讨论】:

以上是关于带有 jruby rake 测试任务的 MiniTest falis的主要内容,如果未能解决你的问题,请参考以下文章

ruby 地理编码rake任务与测试

ruby 地理编码rake任务与测试

mingw / git bash shell中的jRuby问题

从 ActiveStorage 迁移到 Shrine 的 Rake 任务

如何使 rake 任务在 dev 以外的环境中运行?

Rails Rake ENV 变量始终为空