Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Minitest测试对象在Ruby中调用私有方法_Ruby_Testing_Minitest - Fatal编程技术网

使用Minitest测试对象在Ruby中调用私有方法

使用Minitest测试对象在Ruby中调用私有方法,ruby,testing,minitest,Ruby,Testing,Minitest,给定下面的ruby代码,我想确保只有在应用程序配置为运行它时,私有方法start才会启动。我认为这意味着我需要模拟类并存根私有方法,但我只是没有把它放在一起。有人能推我一下吗? 这是我正在尝试的不起作用的东西 def test_it_starts_reporting_automatically mock = Minitest::Mock.new mock.expect :start, true Work::Thing.stub :start, mock do hb =

给定下面的ruby代码,我想确保只有在应用程序配置为运行它时,私有方法
start
才会启动。我认为这意味着我需要模拟类并存根私有方法,但我只是没有把它放在一起。有人能推我一下吗?

这是我正在尝试的不起作用的东西

def test_it_starts_reporting_automatically
  mock = Minitest::Mock.new
  mock.expect :start, true
  Work::Thing.stub :start, mock do
      hb = Work::Thing.new value: "test"
  end
  assert_mock mock
end

Mock
Thread#new
,而不是
Thing#start
。通常,如果一个方法是私有的,测试不应该知道该方法存在。如果你想从外面看到它,也许你应该把它公之于众原因:您不想依赖于私有行为,因为这是一个可能会改变的实现细节。这将给您留下脆弱的测试。我似乎不知道如何模拟新线程
Thread.stub(:new,nil){Thread.new{puts“不应该打印”}}
仍将打印不应该打印的字符串@mudasobwa
Thread#new
是一种类方法。我不熟悉
minitest
,但我建议
Thread.singleton\u class.stub(:new,nil)
应该可以工作。Mock
Thread.new
,而不是
Thing.start
。通常,如果方法是私有的,测试不应该知道该方法存在。如果你想从外面看到它,也许你应该把它公之于众原因:您不想依赖于私有行为,因为这是一个可能会改变的实现细节。这将给您留下脆弱的测试。我似乎不知道如何模拟新线程
Thread.stub(:new,nil){Thread.new{puts“不应该打印”}}
仍将打印不应该打印的字符串@mudasobwa
Thread#new
是一种类方法。我不熟悉
minitest
,但我建议
Thread.singleton\u class.stub(:new,nil)
应该可以工作。
def test_it_starts_reporting_automatically
  mock = Minitest::Mock.new
  mock.expect :start, true
  Work::Thing.stub :start, mock do
      hb = Work::Thing.new value: "test"
  end
  assert_mock mock
end