gpt4 book ai didi

c# - 在同一解决方案的另一个项目中重复使用 SpecFlow 步骤

转载 作者:太空狗 更新时间:2023-10-30 00:10:16 24 4
gpt4 key购买 nike

重用 SpecFlow Given/When/Then 步骤的最佳方式是什么?我想出了三种具有所有特定优点和缺点的方法,但我不认为这是最好的方法。

我在一个解决方案中有两个项目
项目A:

[Binding]
public class BookSteps : StepsBase
{
[Given(@"the following books:")]
public void GivenTheFollowingBooks(Table table)
{
// ...
}
}
  1. 我可以像这样继承我的步骤:

项目B:

[Binding]
public class BookStepsReference : ProjectA.BookSteps { }

这行得通并且需要最少的工作。不幸的是,它破坏了功能文件的智能感知:这些步骤在 ProjectB 功能文件中保持紫色。

  1. 我可以继承并创建一个具有相同签名的方法:

项目B:

[Binding]
public class BookStepsReference : ProjectA.BookSteps
{
[Given(@"the following books:")]
public void GivenTheFollowingBooksReference(Table table)
{
base.GivenTheFollowingBooks(table);
}
}

当我尝试运行测试时,这会中断,因为自动生成的功能步骤会看到两个具有 Given 属性“以下书籍:”的方法,并抛出一个不明确的引用异常。

  1. 我创建了一个引用项目 A 中的绑定(bind)步骤的私有(private)对象:

项目B:

[Binding]
public class BookStepsReference
{
private ProjectA.BookSteps _bookSteps = new ProjectA.BookSteps();

[Given(@"the following books:")]
public void GivenTheFollowingBooks(Table table)
{
_bookSteps.GivenTheFollowingBooks(table);
}
}

这有效并且还在特征文件步骤上应用了正确的智能感知。但是当我想调试我的步骤时,我在初始化 _baseSteps 对象时遇到外部 COM 异常,这可能是由看到双 Binding 属性的 SpecFlow 库引起的。

最后一个选项是我现在的工作方式,但我想知道其他人是否创建了更好的方法来重用其他项目的步骤。

最佳答案

支持的方法是添加对项目的引用,该项目具有您要重用的步骤,然后添加到您要使用的项目中,然后define an external step assembly在这样的配置中:

<specFlow>
<stepAssemblies>
<stepAssembly assembly="MyAssembly.Name" />
</stepAssemblies>
</specFlow>

如果您只需要重用一些步骤,那么您可能需要先将这些步骤提取到一个单独的库中。

关于c# - 在同一解决方案的另一个项目中重复使用 SpecFlow 步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29349577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com