c# - 如何每次在每个测试方法(包含在同一测试装置中)之前初始化实例变量(在 nunit 的测试装置中声明)?

标签 c# selenium-webdriver nunit pageobjects

我在 vs2015 的同一测试夹具下有 3 个 nunit 测试用例。当我单独运行测试用例时,它们通过了。但是当我一起运行它们时,第一个测试用例通过了,其他测试用例失败了。

因为我有一个实例变量,即 testfixture 中的一个 C# 属性,它在第一个测试用例执行之前被初始化。仅在第一个测试用例运行之前才初始化它,我希望在每个测试用例开始之前初始化该属性。但发生的情况是 - 一旦第一个测试用例运行,它就会被初始化,第二个和第三个测试用例将使用相同的值。因此我的第二个和第三个测试用例失败了。

我该怎么做?

在下面的代码中 - Page 是 C# 属性 - 执行登录,登录后单击相应的链接并将您带到目标页面。

这是代码,

[TestFixture]
public class SecurityUserMgmtTests
{
    private SecurityUserManagementPage _page;
    protected override SecurityUserManagementPage Page
    {
        get
        {
            if (_page == null)
            {
                _page = new LoginPage().LoginasAdmin().GoToSecurityUserMgmtPage();
            }

            return _page;
        }
    }

    [Test]
    public void Test_ChooseARole()
    {
        Page.ChooseSecurityRole("administrator", "NMD");

    }

    [Test]
    public void Validate_if_submitting_form_without_securityrole_results_in_alertpopup()
    {
        Page.FillinLoginDetails("testuserr9", "2018/10/06", "yassds", "Ardaa");
        Page.ClickSubmit();
        var alertText = alert.Text;
        alert.Dismiss();

        Assert.AreEqual("Please select a Role for this user", alertText);
    }


    [Test]
    public void Validate_if_creating_adminuser_with_existing_username_results_in_css_alert()
    {
        Page.ChooseSecurityRole("NMD");
        Page.FillinLoginDetails("iatestuser", "2018-05-01", "yas", "Ara");
        Page.ClickSubmit();

        Assert.IsTrue(Page.GetErrorMessage().Contains("already exists"));
    }

}

最佳答案

对于 NUnit,您可以使用 SetUp attribute定义一个方法,该方法将在测试装置中的每个测试中运行一次。由于您的 Page 属性可能需要为每次运行进行设置,因此您可以采用如下方式:

[TestFixture]
public class SecurityUserMgmtTests
{

    protected override SecurityUserManagementPage Page {get;set;}

    [SetUp]
    public void Init() => Page = new LoginPage().LoginasAdmin().GoToSecurityUserMgmtPage();

    // Tests omitted
}

关于c# - 如何每次在每个测试方法(包含在同一测试装置中)之前初始化实例变量(在 nunit 的测试装置中声明)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53125595/

相关文章:

c# - 我如何检测我的显示器现在设置的来源?

c# - 模拟内部函数的响应但测试外部函数

java - 无法找到日期选择器的元素

c# - 具有大字符串输入的单元测试解析器

C# 添加事件处理程序文字代码块

html - 在网页抓取期间修改 HTML 内容

java.lang.NoClassDefFoundError : gherkin/IGherkinDialectProvider while running Selenium-Cucumber test 错误

c# - 为什么我需要将 NUnit 与 Selenium WebDriver 一起使用?

svn - 颠覆/巡航控制/nant/nunit 与 Visual Studio 项目和解决方案

c# - 如何使用用户输入的字符串参数从 C# 安全地执行 powershell 脚本?