2012-03-21 100 views
0

我有一段代码来测试未包裹在方法中的代码。它本身就是一个独立的Ruby类。使用RSpec测试执行代码

begin 
    # Do stuff - bunch of Ruby code 
end 

这不是一个Rails应用程序。这是一个独立的Ruby类。我不想在我的rspec测试中执行整个开始结束语句。你如何测试这样的事情?应该使用mocks/stub来完成吗?我问了几个人,但他们也不知道答案。

+1

如果你不想测试你的方法的一部分,那么你的方法应该分成两个(或更多)方法。 – 2012-03-21 23:16:12

+0

哦,这根本不是一种方法。它只是在文件末尾有一个begin end语句,它包含了代码。所以,它就像是:开始一些Ruby代码结束 – 2012-03-21 23:23:02

+0

如果你不想要某些东西成为代码单元,那么不要让它成为一个单一的代码单元。 – 2012-03-21 23:26:57

回答

1

我发现,如果你可以将行为封装在方法或模块中,这样更容易测试,但这取决于你试图执行的代码。如果代码以公开的方式改变了类,那么你可以编写测试来了解类在内存中的行为如何。例如:

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 

您能否提供一些关于您想要在班级中做什么的背景知识?

+0

我想在开始和结束语句之间做一堆文件操作。所以,我正在检查一个文件是否存在,如果是的话,执行一段代码,如果它不存在,执行另一段代码。 – 2012-03-21 23:32:35