我有一个解决方案,其中包含一组可以使用nuint运行的测试。我正在尝试将specflow集成到其中:
[TestFixture]
[Binding]
public class TestBase
{
protected IWindsorContainer Container {get; set; }
protected IMongoCollectionManager CollectionManager { get; set; }
protected IDatabaseManager DatabaseManager { get; set; }
[TestFixtureSetUp]
[BeforeScenario,CLSCompliant(false)]
public void Setup()
{
Container = TestFixture.Container;
CollectionManager = Container.Resolve<IMongoCollectionManager>();
DatabaseManager = Container.Resolve<IDatabaseManager>();
}
[TestFixtureTearDown]
public void TearDown()
{
Container.Release(CollectionManager);
Container.Release(DatabaseManager);
}
}
每次我运行基本上只有一个场景的特征文件时,它会执行前面的测试四次,然后它甚至会转到给定的场景,但是当我使用简单的nuint运行它时,它正常工作并且只被调用一次。 任何人都可以帮我找出原因吗? 谢谢, 美女
答案 0 :(得分:2)
由于它们是由SpecFlow自动连接的,因此您不应在步骤类中使用这些NUnit属性:
[TestFixture]
[TestFixtureSetUp]
[TestFixtureTearDown]
我不确定您的功能中有多少场景,但BeforeScenario将在每个场景之前运行。如果您希望代码在功能之前或之后运行一次,则可以使用这些钩子:
[BeforeFeature]
[AfterFeature]
如果您希望代码在功能中的每个方案之前或之后运行一次,您可以使用这些钩子:
[BeforeScenario]
[AfterScenario]
此外,如果您的方法需要CLSCompliant(false),则应将其添加到自己的属性中:
[CLSCompliant(false)]
您可以查看SpecFlow文档以获取有关https://github.com/techtalk/SpecFlow/wiki/Hooks上的SpecFlow Hook属性的更多信息。
答案 1 :(得分:0)
有两件事让人想起:
不要混用NUnit属性和SpecFlow属性。您可以通过将执行“工作”的代码包装到单独的类中并从单独的钩子/单元测试类中组合它来获得相同的效果,并使用其特定属性进行装饰。
当我多次执行BeforeScenario时,它是由于specflow挂钩中的继承造成的。我相信这是因为该属性由子类继承,base和sub都由specflow匹配。