请注意:我是 TDD 和黄瓜的新手,所以答案可能很简单。
我正在为测试创建一个基本的图像编辑器(图像只是一个字母序列)。我写了一个黄瓜的故事:
Scenario Outline: edit commands
Given I start the editor
And a 3 x 3 image is created
When I type the command <command>
Then the image should look like <image>
步骤
Scenarios: colour single pixel
| command | image |
| L 1 2 C | OOOCOOOOO |
总是失败,返回
expected: "OOOCOOOOO"
got: " OOOOOOOO" (using ==) (RSpec::Expectations::ExpectationNotMetError)
这是步骤代码:
When /^I type the command (.*)$/ do |command|
@editor.exec_cmd(command).should be
end
程序中的函数 exec_cmd 识别命令并启动适当的操作。在这种情况下,它将启动以下
def colorize_pixel(x, y, color)
if !@image.nil?
x = x.to_i
y = y.to_i
pos = (y - 1) * @image[:columns] + x
@image[:content].insert(pos, color).slice!(pos - 1)
else
@messenger.puts "There's no image. Create one first!"
end
end
但是,除非我在程序本身的函数中硬编码两个局部变量(pos 和 color)的值,否则这总是失败。
为什么?我似乎在程序本身做错了什么:函数做了它应该做的事情,这两个变量只在本地有用。所以我认为这是我使用黄瓜的问题。我该如何正确测试这个?
- -编辑 - -
def exec_cmd(cmd = nil)
if !cmd.nil?
case cmd.split.first
when "I" then create_image(cmd[1], cmd[2])
when "S" then show_image
when "C" then clear_table
when "L" then colorize_pixel(cmd[1], cmd[2], cmd[3])
else
@messenger.puts "Incorrect command. " + "Commands available: I C L V H F S X."
end
else
@messenger.puts "Please enter a command."
end
end