C# NUnit:[SetUp]在基类中,而[OneTimeSetup]在Dervied[TestFixture]中

C# NUnit:[SetUp]在基类中,而[OneTimeSetup]在Dervied[TestFixture]中,c#,selenium-webdriver,nunit,nunit-3.0,C#,Selenium Webdriver,Nunit,Nunit 3.0,我正在看一些使用NUnit的测试代码,NUnit继承自包含[SetUp]属性的基类: public class BaseClass { [SetUp] public void SetUp() { //do something } } [TestFixture] public class DerivedClass : BaseClass { [OneTimeSetUp] public void OneTimeSetUp() { //do s

我正在看一些使用NUnit的测试代码,NUnit继承自包含[SetUp]属性的基类:

public class BaseClass
{
   [SetUp]
   public void SetUp()
   {
     //do something
   }

}

[TestFixture]
public class DerivedClass : BaseClass
{
  [OneTimeSetUp]
  public void OneTimeSetUp()
  {

   //do something here only once for the tests in this fixture but after BaseClass [Setup] method execution. 
  }
   //tests run down here.
   //[Test]
   //[Test]
   //etc
}

在基类[Setup]方法之前调用[OneTimeSetup]方法。是否有可能在基类[Setup]方法之后调用if。我希望先执行基类[Setup]方法,然后对派生的[TestFixture]类中的所有测试只调用一次[OneTimeSetup]方法。在[TestFixture]类中的每个测试之前执行一次[Setup]方法。谢谢。

当您使用继承时,这意味着派生类和基类之间的关系是一个
是一个
,即派生类的实例是一个基类。实际上,它们都是一回事。如果您不希望发生这种情况,那么就不要使用继承

在本例中,您正在DerivedClass上运行测试。它从类本身获取一些方法并继承其他方法。通过使用继承,您可以控制使用相同属性标记的方法的执行顺序。例如,基类中的SetUp方法将在派生类中的SetUp方法之前运行

但是,由每个不同的属性标记的方法在它们应该运行时运行。OneTimeSetUp在类中执行测试之前运行一次。安装程序在每个单独的测试之前运行

现在还不完全清楚您想在这里完成什么,但是如果您想在调用第一个安装程序后完成一次,那么您可以在派生类中使用一个SetUp方法,使用一个静态标志使它只执行一次


也就是说,如果你解释一下你想要完成什么,可能会有一个更干净的方法来完成。

非常感谢Charlie的详细回复。基类设置方法正在创建SeleniumWebDriver实例,初始化NLog和数据块报告。我想在派生测试类fixture中的每个测试之前运行它一次。而在派生测试类夹具中,我希望对该派生测试类夹具中的所有测试运行一次共享的初始测试步骤。我希望能清楚地知道我想要完成什么。感谢在派生类中使用静态设置方法,我将无法访问我将需要的基类非静态成员。@melleck我根本没有建议使用静态方法。而是由方法引用的静态标志。我将用一个例子来编辑我的答案。你能举例说明你想在衍生夹具一次性设置中做什么吗?衍生夹具中测试方法的常见测试步骤,如:1。使用用户登录到应用程序。2.转到“设置”。3.转到用户。然后,在测试方法中使用相同的selenium驱动程序会话。1.添加新用户。2.填写用户表格。3.提交用户表单。4.验证用户是否已成功创建。重复测试步骤1-4,使用TestCaseSource创建多个用户。