如何在代码中描述“不太简单”的行为(BDD)?

时间:2010-01-28 04:56:19

标签: c# .net unit-testing tdd bdd

假设我打算在C#中的位图上绘制一些用户提供的文本,我会在前面写什么类型的测试?

这种事情甚至可能吗?在处理数学问题时,BDD似乎非常简单,但我发现在处理自定义UI控件,图形等时,它几乎不可能,而且比它的价值更麻烦。

我能找到的所有TDD示例都使用简单的计算示例,如货币转换或十针保龄球评分,即使是新手也可以轻松使用TDD。我错过了什么吗?

5 个答案:

答案 0 :(得分:2)

嗯..我想要一些你想要测试的行为的更具体的例子。

AFAIK,BDD与问题复杂性无关。如果您可以用英语向某人解释,您可以编写BDD 故事 / 情景

GIVEN some text entered by the user 'DRAW THIS'
WHEN I have a bitmap 'c:\temp\SampleImage.bmp'
THEN the text should be drawn on the bitmap

接下来,您将上述每个步骤映射到粘合代码 - 该密钥到您的应用代码中

  • 用户输入的一些文字'DRAW THIS'=> setText('DRAW THIS')
  • 我有一个位图'c:\ temp \ SampleImage.bmp'=> loadBitmap( 'C:\ TEMP \ SampleImage.bmp')
  • 文本应该在bitmap =>上绘制verifyTextOnBitmapInMemory()

胶水代码是开发人员定义的,并且可以像情况要求一样复杂。同上TDD。

答案 1 :(得分:1)

使用合适的库并不难。查看Approval Tests,了解Java,.net和ruby。 完全披露:它是由我的朋友写的。

通过批准测试,您可以绘制所需的图像,然后要求代码生成匹配的内容。或者 - 只需编写正确的代码,手动接受它生成的图像,然后就是你的测试。强烈推荐,对于这种问题。

答案 2 :(得分:0)

可能,是(请参阅OCRcomputer vision)。现实,没有。

(在不久的将来可能会变得可行:Picture driven programmingProject SIKULI

答案 3 :(得分:0)

如果您希望围绕此进行自动测试,我认为这比它的价值要麻烦得多。在某种程度上,这取决于有关元素在未来可能发生变化的程度。

但是,您可以轻松添加半自动化测试。

  • 运行测试
  • 表格显示位图和(希望)文字在
  • 上绘制
  • 是/没有弹出对话框(由测试方法启动) - “正确绘制文字?”
  • 点击是,测试通过;点击否,失败

在某些测试框架中,您可以使用像[Slow]这样的属性来执行此类测试或者对数据库进行集成测试,这样它们就不会在常见的日常测试运行中运行,而是在更全面的测试运行中运行。 / p>

答案 4 :(得分:0)

正如其他人所说,这真的很难。您真正需要的是GUI单元测试,因此您可以编写如下的BDD测试:

public void can_draw_user_supplied_text_on_bitmap()
{
    draw_on_bitmap();
    check_bitmap()
}

唯一能够轻松完成此工作的工具是IcuTest 当然,我很偏颇;我写的。如果您对测试版感兴趣,请告诉我。