复制测试文件设置行时,不要忘记重命名测试类。这是为什么
如何在一个Ruby Minitest文件中设置在不同Minitest文件中导致六个错误?复制测试文件设置行时,不要忘记重命名测试类。这是为什么
我甚至不知道如何看这一个。希望你能帮助。
我正在写单元测试(在Minitest中为Ruby,为this "to do list" learning project),我的测试通过的很好。然后,我开始在一个新文件test_todo_helpers.rb中编写一个方法的测试,并且第一次运行文件的设置方法时,我得到了六个错误。事实证明,这些错误在完全不同的测试脚本中是错误的,test_task.rb。当我简单地删除第一个测试文件时,所有的测试都通过了!请注意,我根本没有触碰源文件。
下面是一个示例错误消息,六个错误之一(所有这些都是“未定义的方法为零”)。
1) Error:
TestTask#test_check_description:
NoMethodError: undefined method `check_description' for nil:NilClass
C:/Users/user/Dropbox/_Programming/Ruby/learning_projects/todo/test/test_task.rb:41:in `test_check_description'
在test_todo_helpers.rb,我能问题缩小到一个单一的线,在这里它是:@store = TaskStore.new('tasks.yml')
。在一个测试文件中注释掉该行,并且另一个测试文件中的所有错误都会奇迹般地消失!
我完全像WTF?为什么在一个测试文件中将我的yaml存储加载到一个实例变量中会导致一个不同的测试文件中的对象(通常不是nil
)突然变为nil
?
我在想,也许我需要做一些teardown
?我从来不这样做,因为我从来不知道为什么这是必要的。一个文件中的测试是否会影响其他文件中的测试? (我是初学者。)
这让我感到潜在的学习机会,所以我就在这里。任何想法是怎么回事?
test_task.rb
和test_todo_helpers.rb
都提供了TestTask
的定义。这意味着两个文件测试被minitest视为一组测试。如果您在test_todo_helpers.rb
中将class TestTask < Minitest::Test
更改为class TestTodoHelpers < Minitest::Test
,则所有测试都会通过。
呃。你是完全正确的。我从'test_task.rb'复制了测试文件的前几行,当我按照你的说法重命名测试类时,所有测试都通过了。谢谢!新年快乐! – globewalldesk
也许你不能创建两个同名的商店?我会尝试在开始下一个测试之前删除商店及其yaml文件。 – spickermann