我扩大了我的红宝石理解的编码一个相当于肯特*贝克人来完成在红宝石。蟒蛇(其中肯特写中)有一个assert()方法中的语言是广泛使用。红宝石不。我认为它应该很容易添加这一点,但是核对地方放它?

顺便说一句, 我知道所存在的各种单元的框架,在红宝石 -这是一个练习学习的红宝石成语,而不是"得到的东西"。

有帮助吗?

解决方案

不,这不是最佳做法。在Ruby中断言()的最好类比就是提高

 raise "This is wrong" unless expr

如果要提供更具体的异常处理,可以实现自己的异常

其他提示

我觉得它是完全有效使用声称在红宝石。但你提到的两个不同的东西:

  • 来完成框架的使用 assert 方法可以检查你的测试的期望。他们的目的是要用在你的测试代码,不在应用程序的代码。
  • 一些语言,如C、Java或蟒蛇,包括一个 assert 建造旨在使用的内部编码的程序、检查假设你做关于他们的完整性。这些检查是建立内的代码本身。他们不是试验时间的效用,但一个发展时之一。

我最近写的 solid_assert:一点红宝石图书馆实施的红宝石的断言实用 并且还 后在我的博客解释其动机..它让你写信表达形式:

assert some_string != "some value"
assert clients.empty?, "Isn't the clients list empty?"

invariant "Lists with different sizes?" do
    one_variable = calculate_some_value
    other_variable = calculate_some_other_value
    one_variable > other_variable
end    

他们可以停用所以 assertinvariant 获得评价为空洞的声明。这让你避免任意性问题的产生。但注意 务实的程序员 建议对禁他们。你应该只停用他们,如果他们真正影响到绩效。

有关答复说,地道的红宝石的方法是使用一个正常的 raise 发言,我认为它缺乏表达的.一个黄金规则的坚定编程是不使用的断言为正常例外处理。他们是两个完全不同的东西。如果你使用相同的语法为他们两个,我认为你的代码将更加模糊不清。当然你会失去能力的停用它们。

你可以相信,使用断言是一件好事,因为两个必读书喜欢经典 务实的程序,从熟练掌握代码完成 奉献全部分给他们,并推荐他们的使用。还有一个不错的文章 编程的断言 这说明了非常好,什么是果断的编程和时使用(这是基于在爪哇,但概念适用于任何语言)。

将断言方法添加到内核模块的原因是什么?为什么不使用另一个名为 Assertions 的模块?

像这样:

module Assertions
  def assert(param)
    # do something with param
  end

  # define more assertions here
end

如果您真的需要断言无处不在,请执行以下操作:

class Object
  include Assertions
end

免责声明:我没有测试代码,但原则上我会这样做。

这不是特别惯用,但我认为这是一个好主意。特别是如果这样做:

def assert(msg=nil)
    if DEBUG
        raise msg || "Assertion failed!" unless yield
    end
end

如果您决定不使用DEBUG(或其他一些方便的开关,我过去使用过Kernel.do_assert)设置,那么没有任何影响。

我的理解是,您正在编写自己的测试套件,以此来熟悉Ruby。因此,尽管Test :: Unit可能对您有用,但它可能不是您想要的(因为它已经完成了工作)。

那就是说,python的断言是(对我来说至少),更类似于C的断言(3)。它不是专门用于单元测试,而是用于捕获“这应该永远不会发生”的情况。

Ruby的内置单元测试如何倾向于查看问题,然后,每个单独的测试用例类是 TestCase ,包括”assert“和”assert“。声明,检查传递给它的内容的有效性,并将其记录下来进行报告。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top