对不起,我是Ruby的新手。
我在RSpec测试中有这样的代码:
it "if Add get empty string as parameter return 0" do
lambda { StringCalculator.new(5).Add("") }.should == 0
end
它不起作用,因为lambda没有“应该”的方法。最重要的是lambda在这种情况下不会执行!我不确定,请告诉我,如果我不对。
然后我尝试这样的代码:
it "if Add get empty string as parameter return 0" do
lambda { StringCalculator.new(5).Add("") }.call.should == 0
end
并且一切正常,因为我使用方法“call”,因此lambda执行。
我想如果我们使用方法“call”到lambda那么lambda就会执行。
但是后来我为lambda尝试了这样的代码WITHOUT CALL方法:
it "if Add get empty string as parameter return 0" do
lambda { StringCalculator.new().Add("") }.should raise_exception ArgumentError
end
我不使用“call”方法,但不知何故测试通过,这意味着执行了lambda,并且由于没有参数的.new().
,抛出了异常。
请帮助我理解为什么在第三种情况下检测到异常是否应该执行lambda?我不使用电话。
在第三种情况下,使用“call”方法结果是相同的,我理解为什么。
感谢您的帮助。
另外还有StringCalculator类的代码:
class StringCalculator
def initialize(x)
@x = x
end
def Add(str)
if str == ""
0
end
end
end
答案 0 :(得分:1)
raise_error
需要一个块来执行,在你的上一个例子中,你给了一个块(即你的lambda)。
在您的第一个示例中,如果您想将<table>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
<tr>
<td>a.1</td>
<td>b.1</td>
<td>c.1</td>
</tr>
<!-- More rows -->
</table>
与equality matcher一起使用,例如should
,您只需:{/ p>
==
顺便说一句,在较新版本的RSpec中,您可以将其写为:
StringCalculator.new(5).Add("").should == 0