【问题标题】:Don't forget to rename your test classes when copying test file setup lines. Here's why复制测试文件设置行时不要忘记重命名测试类。这就是为什么
【发布时间】:2017-01-02 10:53:56
【问题描述】:

如何在一个 Ruby Minitest 文件中进行设置会导致另一个 Minitest 文件中出现六个错误?

我什至不知道我会怎么看这个。希望你能帮忙。

我正在编写单元测试(在 Minitest for Ruby,this "to do list" learning project),我的测试通过了。然后,我开始为新文件test_todo_helpers.rb 中的方法编写测试,第一次运行文件的 setup 方法时,我遇到了六个错误。事实证明,这些错误是完全不同的测试脚本test_task.rb 中的错误。当我简单地删除第一个测试文件时,我所有的测试都通过了!注意,我根本没有接触源文件。

这是一个示例错误消息,是六个错误之一(所有这些都是“nil 的未定义方法”)。

  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?我从不这样做,因为我从来不知道为什么它是必要的。一个文件中的测试会影响另一个文件中的测试吗? (我是初学者。)

这让我觉得这是一个潜在的学习机会,所以我来了。知道发生了什么吗?

【问题讨论】:

  • 也许你不能创建两个同名的商店?在开始下一个测试之前,我会尝试删除商店及其 yaml 文件。

标签: ruby unit-testing minitest


【解决方案1】:

test_task.rbtest_todo_helpers.rb 都提供TestTask 的定义。这意味着 minitest 将这两个文件测试视为一组测试。如果您将test_todo_helpers.rb 中的class TestTask < Minitest::Test 更改为class TestTodoHelpers < Minitest::Test,则您的所有测试都会通过。

【讨论】:

  • 呃。你完全正确。我从test_task.rb 复制了测试文件的前几行,当我按照你说的重命名测试类时,测试都通过了。谢谢!新年快乐!
猜你喜欢
  • 1970-01-01
  • 2020-09-03
  • 2010-10-16
  • 2023-03-21
  • 2019-07-23
  • 1970-01-01
  • 2012-07-27
  • 2021-12-09
  • 2014-06-15
相关资源
最近更新 更多