StoryQ BDD, Given 或 When without a body

StoryQ BDD, Given or When without a body

我想为我的 class,

的构造函数做一个非常简单的测试
[Test]
public void InitLensShadingPluginTest()
{
    _lensShadingStory.WithScenario("Init Lens Shading plug-in")
        .Given(InitLensShadingPlugin)
        .When(Nothing)
        .Then(PluginIsCreated)
        .Execute();
}

这可以在 Given 或 When it 中...我认为它应该在 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)

有更好的做法吗?

奇怪的是 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)

这些都可以解决您的问题。

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

对于 class 级别的行为示例,我会使用普通的单元测试工具,如 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);

class 级别的步骤不会像在全系统场景中那样重用,因为 classes 具有更小、更封装的职责;开发人员受益于阅读代码而不是将其隐藏在步骤定义中。

如果 class 直接驱动用户看到的功能,您在此处的 Given/When/Then 评论可能仍会反映更高级别的场景。

通常对于全系统场景,我们会从与“3 个朋友”的对话中得出步骤:

  • 业务代表(PO、SME、有问题需要解决的人)
  • 测试人员(发现我们可能会错过的场景)
  • 开发人员(谁来解决问题)。

可能有一对开发者。 UI 如果设计师愿意,可以参与其中。 Matt Wynne 说是“3 个朋友,其中 3 是 3 到 7 之间的任意数字”。进行对话的最佳时间是在开发人员拿起工作开始编码之前。

但是,如果您是独立工作,无论是玩具还是真实的应用程序,您都可能会从想象中的对话中获益。 I use a pixie called Thistle for mine.