3

我正在构建一个自动化流程的工具,然后对它自己的结果运行一些测试,然后去做一些其他的事情。

在尝试清理我的代码时,我创建了一个单独的文件,其中只有测试用例类。现在,在我可以运行这些测试之前,我必须先向类传递几个参数/对象,然后才能运行它们。现在的问题是我似乎找不到将参数/对象传递给测试类的方法。

现在我正在考虑生成一个 Yaml 文件并在测试类中读取它,但是为此使用临时文件感觉“错误”。如果有人有更好的解决方案,那就太好了!

**************编辑************

我现在正在做的示例代码:

#!/usr/bin/ruby
require 'test/unit/ui/console/testrunner'
require 'yaml'
require 'TS_SampleTestSuite'

automatingSomething()
importantInfo = getImportantInfo()

File.open('filename.yml', 'w') do |f|
    f.puts importantInfo.to_yaml
end

Test::Unit::UI::Console::TestRunner.run(TS_SampleTestSuite)

现在在上面的例子中 TS_SampleTestSuite 需要重要信息,所以第一个“测试用例”是一个方法,它只是从 Yaml 文件 filname.yml 中读取信息。

我希望这能消除一些困惑。

4

2 回答 2

0

首先,我同意 Cameron 的观点,这段代码肯定不符合 Ruby 的方式,尽管我现在也会回避它。

启动和运行它的最快方法,特别是如果这个数据几乎是不可变的(也就是说,你的测试无论如何都不会改变它),就是将值分配给一个常量。因此,与其命名变量importantInfo,不如命名它IMPORTANT_INFO。然后它将在您的测试中提供给您。这绝对不是一个很好的解决方案,我认为它甚至可以被认为是一种测试气味,你需要那种全局设置,但它就在那里。

或者,您可以查看 stubbing importantInfo,我实际上认为这将提供更清洁和更具可读性的测试。

于 2009-01-01T19:19:33.687 回答
0

总体而言,看起来您并没有真正以非常红宝石的方式使用单元测试,但我将把它放在一边。

您的基本问题是您需要在测试运行之前进行一些设置。执行此操作的正常方法是使用测试单元案例本身中的设置方法。

class UserTest < TestUnit::TestCase

  def setup
    # do your important calculation
  end

  def test_success
    #.. assert some things
  end
end

我会考虑一下您实际上在这里测试的是什么代码,看看您是否可以分解它并以更细化的方式对其进行测试,并进行更多测试。

于 2008-11-14T00:06:19.857 回答