StoryQ BDD,给定或没有身体时

时间:2018-01-18 09:40:19

标签: c# bdd storyq

我想对我班级的构造函数进行一个非常简单的测试,

[Test]
public void InitLensShadingPluginTest()
{
    _lensShadingStory.WithScenario("Init Lens Shading plug-in")
        .Given(InitLensShadingPlugin)
        .When(Nothing)
        .Then(PluginIsCreated)
        .Execute();
}

这可以在Given或者它...我认为它应该在When()中但它并不重要。

private void InitLensShadingPlugin()
{
    _plugin = new LSCPlugin(_imagesDatabaseProvider, n_iExternalToolImageViewerControl);
}

由于构造函数是被测试者,我在When()语句中没有任何事情可做,

Then()中,我断言插件的创建。

private void PluginIsCreated()
{
    Assert.NotNull(_plugin);
}

我的问题是关于StoryQ,因为我不想在When()内做任何事情 我试图使用When(()=>{})但是storyQ不支持 这意味着我需要实现像

这样的东西
private void Nothing()
{
}

并致电When(Nothing)

有更好的做法吗?

1 个答案:

答案 0 :(得分:1)

奇怪的是,StoryQ不支持缺少步骤;您的场景实际上是我用于启动应用程序,游戏等的其他示例的典型代表:

Given the chess program is running
Then the pieces should be in the starting positions
例如

。因此,您希望使用条件后跟结果是完全有效的。

看看StoryQ的API,它看起来好像不支持这些空步骤。您始终可以创建自己的方法并调用其中的Given和When步骤,从When:

返回操作
    .GivenIStartedWith(InitLensShadingPlugin)
    .Then(PluginIsCreated)

如果这看起来太笨重了,我会按照你的建议去做,并将Given移动到When,用一个更有意义的名字用空方法初始化Given:

    Given(NothingIsInitializedYet)
    .When(InitLensShadingPlugin)
    .Then(PluginIsCreated)

其中任何一个都可以解决您的问题。

但是,如果你所测试的只是一个类,而不是整个应用程序,那么使用StoryQ可能有点过分。自然语言BDD框架(如StoryQ,Cucumber,JBehave等)旨在帮助业务和开发团队协作探索需求。它们会产生大量的设置和维护开销,因此如果您的类级别方案/示例的受众是技术性的,那么可能会有一种更简单的方法。

对于类级别的行为示例,我将使用像NUnit或MSpec这样的普通单元测试工具。我喜欢使用NUnit并在评论中添加“Given / When / Then”:

// Given I initialized the lens shading plugin on startup
_plugin = new LSCPlugin(_imagesDatabaseProvider, n_iExternalToolImageViewerControl);    

// Then the plugin should have been created
Assert.NotNull(_plugin);

类级别的步骤不会以与完全系统方案相同的方式重用,因为类具有更小,更多的封装职责;并且开发人员可以从阅读代码中获益,而不是将其隐藏在步骤定义中。

您的Given / When / Then如果该类直接驱动用户看到的功能,那么这里的评论可能仍然会回应更高级别的场景。

通常对于完整系统场景,我们会从与“3 amigos”的对话中得出步骤:

  • 商业代表(PO,SME,有问题需要解决的人)
  • 一名测试员(他发现了我们可能错过的情景)
  • 开发者(谁将解决问题)。

可能有一对开发者。 UI设计师可以参与其中。 Matt Wynne说它是“3 amigos,其中3是3到7之间的任何数字”。在开发人员开始编写代码之前,进行对话的最佳时机是正确的。

然而,如果你自己工作,无论是玩具还是真正的应用程序,你都可以从虚构的对话中受益。 I use a pixie called Thistle for mine.