使用Minitest测试对象在Ruby中调用私有方法
给定下面的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 =
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“不应该打印”}}
仍将打印不应该打印的字符串@mudasobwaThread#new
是一种类方法。我不熟悉minitest
,但我建议Thread.singleton\u class.stub(:new,nil)
应该可以工作。MockThread.new
,而不是Thing.start
。通常,如果方法是私有的,测试不应该知道该方法存在。如果你想从外面看到它,也许你应该把它公之于众原因:您不想依赖于私有行为,因为这是一个可能会改变的实现细节。这将给您留下脆弱的测试。我似乎不知道如何模拟新线程Thread.stub(:new,nil){Thread.new{puts“不应该打印”}}
仍将打印不应该打印的字符串@mudasobwaThread#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