我应该打开一个类的实例变量来进行测试验证吗?

时间:2011-04-21 15:52:42

标签: ruby oop bdd

我是BDD的新手,我发现很多实例,我只是将实例变量添加到attr_accessor,这样我的测试就可以轻松验证它们是否处于应该处于的状态。但是这感觉有点脏,因为没有其他类需要这些信息,因此我只是公开测试。这是标准还是设计糟糕的标志?

例如,我有一个存储对象的集合类,然后将其提交到批处理数组。导入结束时,批处理数组用于批量插入数据库。但是无需在任何时候检查批次的状态。但是在测试中,我想确保批处理处于我认为的状态,因此我要打开该变量进行检查。是不是在代码中检查了真正的问题呢?

2 个答案:

答案 0 :(得分:2)

您正在使用instance_variable_get选项吗?

>> class Foo
..   def initialize
..     @foo = 'bar'
..     end
..   end #=> nil
>> Foo.new.instance_variable_get(:@foo) #=> "bar"

答案 1 :(得分:2)

不要那样做!

这太深了。请参阅@Andy和@Michael在另一个“已接受”答案的主题中的评论

不要编写查看代码单元内部的单元测试。如果它不是从外部接口到对象的东西,那么它不需要进行单元测试。您将了解代码如何实现该行为的方式,并且您不希望测试达到该级别,因为它们在证明代码完成应有的功能方面没有提供任何实际价值。 / p>

只要考虑一下,如果某人重新考虑该代码并为了使其更具可读性,可能需要更新多少次测试才能更改事物的内部名称..或者可能找到更好的方法来执行任何操作和所有实例变量得到改变..代码单元仍然可以正常工作,但单元测试会失败..

或者,如果进行了更改以调整内部变量如何向接口报告,则可以有效地破坏代码,但是查看实例变量内部值的测试不会报告任何失败。