我最近尝试使用此工具锐化我的导轨技能:
http://github.com/edgecase/ruby_koans
但我无法通过一些测试。此外,我不确定我是否正确地做了一些事情,因为目标只是通过测试,有很多方法可以通过它,我可能会做一些不符合标准的事情。
有没有办法确认我做得对吗?
一个具体的例子:
在about_nil,
def test_nil_is_an_object
assert_equal __, nil.is_a?(Object), "Unlike NULL in other languages"
end
所以它告诉我检查第二个子句是否等于一个对象(所以我可以说nil是一个对象)或者只是放assert_equal true, nil.is_a?(Object)
因为该语句是真的吗?
和下一个测试:
def test_you_dont_get_null_pointer_errors_when_calling_methods_on_nil
# What happens when you call a method that doesn't exist. The
# following begin/rescue/end code block captures the exception and
# make some assertions about it.
begin
nil.some_method_nil_doesnt_know_about
rescue Exception => ex
# What exception has been caught?
assert_equal __, ex.class
# What message was attached to the exception?
# (HINT: replace __ with part of the error message.)
assert_match(/__/, ex.message)
end
end
我猜我应该在assert_match中放一个“No method error”字符串,但是assert_equal呢?
答案 0 :(得分:10)
assert_equal true, nil.is_a?(Object)
确实是正确的解决方案。问题是“在Ruby对象中是否存在nils?”,而在Ruby的情况下,它们是。因此,为了传递断言,你应该断言该测试的真实性。
在第二个示例中,当您在nil上调用未定义的方法时,您将获得NoMethodError: undefined method 'foo' for nil:NilClass
。因此,异常类为NoMethodError
,消息为undefined method 'foo' for nil:NilClass
。在控制台中测试失败的行为,看看你从中获得了什么,然后将这些知识应用到测试中。
答案 1 :(得分:5)
你在跑吗
ruby path_to_enlightenment.rb
在更正每个测试后的命令提示符下?它会给你很多帮助。
另外“记住,沉默有时候是最好的答案” - 如果你难过,不要放任何东西,工具会帮助你。
答案 2 :(得分:2)
好吧,在使用Red-Green-Refactor的典型TDD座右铭时,你应该运行测试(可能在一个单独的控制台中使用rake)并看到失败发生。从那里,他们为您提供了一些关于预期内容的信息。
至于风格,公案并没有真正教导它。你应该找到并阅读一些用ruby编写的代码,以了解ruby社区的典型约定和习语。
答案 3 :(得分:2)
简单性是Ruby Koans的关键 - 当我开始它时,我认为必须比它更难,但事实并非如此!只要向IRB询问Koans问你的问题,经过几次你就会感觉到它。我写了一篇关于它的博客文章来帮助其他人:
答案 4 :(得分:1)
我记得当我这样做的时候,我试图想出测试并尝试放入
<Answer> and <"Answer">
要记住的是,实际的类不必是字符串或其他东西。 所以答案是
ex.class, ex.class
如上所述,将代码放入irb并执行它。
(1..5).class == Range
是一个很大的暗示