我有一段代码来测试未包裹在方法中的代码。它本身就是一个独立的Ruby类。使用RSpec测试执行代码
begin
# Do stuff - bunch of Ruby code
end
这不是一个Rails应用程序。这是一个独立的Ruby类。我不想在我的rspec测试中执行整个开始结束语句。你如何测试这样的事情?应该使用mocks/stub来完成吗?我问了几个人,但他们也不知道答案。
我有一段代码来测试未包裹在方法中的代码。它本身就是一个独立的Ruby类。使用RSpec测试执行代码
begin
# Do stuff - bunch of Ruby code
end
这不是一个Rails应用程序。这是一个独立的Ruby类。我不想在我的rspec测试中执行整个开始结束语句。你如何测试这样的事情?应该使用mocks/stub来完成吗?我问了几个人,但他们也不知道答案。
我发现,如果你可以将行为封装在方法或模块中,这样更容易测试,但这取决于你试图执行的代码。如果代码以公开的方式改变了类,那么你可以编写测试来了解类在内存中的行为如何。例如:
class Foo
attr_accessor :bar
end
describe Foo
it "should have an attr_accessor bar" do
foo = Foo.new
foo.bar = "baz"
foo.bar.should == "baz"
end
end
如果您以私人方式改变班级,这会变得更加困难。
我以前有幸通过将这种类型的行为重写为可以明确调用的方法。它使测试变得更加简单,并且在解决问题时更容易理解时序。例如:
class Foo
def self.run
# do stuff
end
end
您能否提供一些关于您想要在班级中做什么的背景知识?
我想在开始和结束语句之间做一堆文件操作。所以,我正在检查一个文件是否存在,如果是的话,执行一段代码,如果它不存在,执行另一段代码。 – 2012-03-21 23:32:35
如果你不想测试你的方法的一部分,那么你的方法应该分成两个(或更多)方法。 – 2012-03-21 23:16:12
哦,这根本不是一种方法。它只是在文件末尾有一个begin end语句,它包含了代码。所以,它就像是:开始一些Ruby代码结束 – 2012-03-21 23:23:02
如果你不想要某些东西成为代码单元,那么不要让它成为一个单一的代码单元。 – 2012-03-21 23:26:57