【问题标题】:NUnit: [SetUp] in base class and [OneTimeSetup] in Dervied [TestFixture]NUnit:基类中的 [SetUp] 和衍生 [TestFixture] 中的 [OneTimeSetup]
【发布时间】:2020-10-29 21:55:11
【问题描述】:

我正在查看一些使用 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
}

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

【问题讨论】:

    标签: c# selenium-webdriver nunit nunit-3.0


    【解决方案1】:

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

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

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

    尚不完全清楚您要在这里完成什么,但如果您希望在调用第一个 SetUp 后一次完成某些事情,那么您可以在派生类中使用 SetUp 方法用于使其只执行一次的静态标志。

    也就是说,如果您解释了您要完成的工作,可能会有更简洁的方法来完成。

    【讨论】:

    • 非常感谢查理的详细回复。 BaseClass Setup 方法是创建 Selenium WebDriver 实例,初始化 NLog 和 Extent 报告。我想在派生的测试类夹具中的每个测试之前运行一次。而在派生测试类夹具内,我想运行共享的初始测试步骤,以便为派生测试类夹具内的所有测试运行一次。我希望很清楚我想要完成什么。谢谢
    • 在派生类中使用静态 SetUp 方法,我将无法访问我需要的基类非静态成员。
    • @melleck 我根本没有建议使用静态方法。而是由您的方法引用的静态标志。我会用一个例子来编辑我的答案。
    • 你能举例说明你想在派生的夹具一次性设置中做什么吗?
    • 派生夹具中测试方法的常用测试步骤,例如: 1. 使用用户登录到应用程序。 2. 进入设置。 3. 转到用户。然后,在测试方法中使用相同的 selenium 驱动程序会话。 1. 添加新用户。 2. 填写用户表格。 3. 提交用户表格。 4. 验证用户创建成功。重复测试步骤 1-4 以使用 TestCaseSource 创建多个用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多