0

在我的一个模型中,我使用一些元编程来动态定义一些方法。我想测试一下;因此,我需要一种紧凑的方法来断言我的模型具有具有特定名称的可读/可写属性。想法?

如果它有所作为,我将使用 shoulda 进行单元测试。

4

2 回答 2

3

您可能可以使用 should_have_instance_methods 或 should_have_class_methods shoulda 宏 - 我没有尝试过这个用例,它们可能依赖于您的对象具有超类 ActiveRecord::Base

那么respond_to呢?

o = some_dynamic_object()
assert(o.respond_to?(:method_x)) # getter
assert(o.respond_to?("method_x=".to_sym) # setter
于 2010-04-20T00:32:33.490 回答
2

有几种方法,取决于它的定义方式。如果您正常定义它(以某种方式defdefine_methodevalor中class_eval),那么您可以使用defined? obj.prop它来确保它响应读者(作家没有等价物)。您也可以obj.respond_to? :prop用于读者和obj.respond_to? :prop=作者。

如果您method_missing用来模拟对属性的调用,那么obj.respond_to?只有在您重新定义它时才会起作用(在这种情况下,您需要单独测试它),并且测试您的属性的唯一方法是尝试从中读取并写信给它,并断言它不会抛出任何异常。

于 2010-04-20T00:33:48.640 回答