1
我将单元测试添加到大量代码中,并且正在寻找一种方法来插入伪造方法以用于测试目的。问题在于,据我所知,在Ruby中传递一个方法必须使用ClassName.method(:method_name)
,然后重构我测试使用boo.call()
而不是仅仅使用boo()
的方法。有没有更容易的方法来做到这一点比重构所有使用.method
和.call
?不使用.method/.call存储和调用Ruby方法
我将单元测试添加到大量代码中,并且正在寻找一种方法来插入伪造方法以用于测试目的。问题在于,据我所知,在Ruby中传递一个方法必须使用ClassName.method(:method_name)
,然后重构我测试使用boo.call()
而不是仅仅使用boo()
的方法。有没有更容易的方法来做到这一点比重构所有使用.method
和.call
?不使用.method/.call存储和调用Ruby方法
为什么不通过lambdas?我的意思是,lambda只是一个匿名方法/函数,就像你从其他语言中知道的一样,所以它应该可以正常工作。例如:
fake_method = lambda { |n| "do something with n" }
def other_method(fm)
#...
fm.call
#...
end
other_method(fake_method)
你仍然需要调用.call
虽然
也许嘲笑方法会帮助你?我不确定测试:unit,但在rspec中他们很棒。 – 2011-12-15 17:47:18
这就是我最终做的。我已经知道flexmock可以做到这一点,但想要更有表现力的东西,并且很难找到比纯Ruby更具表现力的东西(即假货),但不会以重构我的代码库为代价。 – 2011-12-15 20:06:07