我是BDD的新手,我发现很多实例,我只是将实例变量添加到attr_accessor,这样我的测试就可以轻松验证它们是否处于应该处于的状态。但是这感觉有点脏,因为没有其他类需要这些信息,因此我只是公开测试。这是标准还是设计糟糕的标志?
例如,我有一个存储对象的集合类,然后将其提交到批处理数组。导入结束时,批处理数组用于批量插入数据库。但是无需在任何时候检查批次的状态。但是在测试中,我想确保批处理处于我认为的状态,因此我要打开该变量进行检查。是不是在代码中检查了真正的问题呢?
答案 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>
只要考虑一下,如果某人重新考虑该代码并为了使其更具可读性,可能需要更新多少次测试才能更改事物的内部名称..或者可能找到更好的方法来执行任何操作和所有实例变量得到改变..代码单元仍然可以正常工作,但单元测试会失败..
或者,如果进行了更改以调整内部变量如何向接口报告,则可以有效地破坏代码,但是查看实例变量内部值的测试不会报告任何失败。