C# 如何知道SpecFlow中后续步骤所需的数据?

C# 如何知道SpecFlow中后续步骤所需的数据?,c#,testing,specflow,C#,Testing,Specflow,我的问题如下: 我的一些场景需要在加载模型后保存模型的状态,以便稍后进行比较。我将序列化对象,并在稍后的测试中比较它们。但是我不想在每个测试中序列化状态-这可能会对测试的性能产生负面影响。我如何知道这些数据是否必要 我曾想过使用标记,但这是一个应该隐藏在功能文件中的信息。我不想在我需要的每个测试中被迫编写类似于@SaveInitialState的东西 编辑 这里是一个需要信息的样本测试 Given I have loaded some model When I do some action An

我的问题如下:

我的一些场景需要在加载模型后保存模型的状态,以便稍后进行比较。我将序列化对象,并在稍后的测试中比较它们。但是我不想在每个测试中序列化状态-这可能会对测试的性能产生负面影响。我如何知道这些数据是否必要

我曾想过使用标记,但这是一个应该隐藏在功能文件中的信息。我不想在我需要的每个测试中被迫编写类似于
@SaveInitialState
的东西

编辑

这里是一个需要信息的样本测试

Given I have loaded some model
When I do some action
And Undo the last action
Then The loaded model is unchanged

这里选择序列化是因为模型不可能被克隆,我不想为测试引入新的生产代码。序列化只能在测试中完成。

您可能试图在此处执行错误类型的测试,或者至少使用错误的工具进行此类测试

是一种工具,通常被称为,但更准确地称为。其基本思想是提供有趣案例的具体示例,以测试应用程序的功能

这些例子需要明确。如果说
之类的话,那么加载的模型是不变的
是非常隐含的。相反,我会使用这样一个案例

Given I am editing Bob's details
When I change Bob's age to 42
And I undo all changes
Then Bob should be aged 24
请注意,我在这里使用了一个使用预定义示例的技巧。我们的想法是,团队中的所有开发人员和BAs都知道Bob已经24岁了,在帮助台工作。您预先定义了已知的示例,这样您就可以避免说

Given I create a new Person
And my person should be called Bob
And my person should be aged 24
And my person should work on the Help desk

在问题中添加测试样本会很好。此外,如果数据比person对象更复杂,那么还不清楚为什么必须使用序列化。例如,图形工作表包含十个或更多对象,这些对象相互连接并以某种方式对齐。详细描述复杂操作后需要撤消的操作可能会让人困惑。再次使用预定义的示例可以真正简化这一点,例如,
,因为我正在编辑Gordon Ramsey Duck a l'orange工作流
,该工作流肯定有十多个步骤,其中一些步骤是并行进行的。它实际上是关于描绘阅读规范的人应该看到的图片:-)如果没有问题,加载示例,但是验证一个操作并且它被撤销。例如,我正在测试的一个操作修改了5个对象的一个属性,并创建了5个新对象。我需要检查这五个属性是否已重置,以及这五个对象中是否存在非属性。这会让测试变得非常混乱。