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.
我想为我的 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.