如何在每种测试方法(包含在同一测试夹具中)之前每次初始化实例变量(在nunit的测试夹具中声明)?

时间:2018-11-02 20:45:09

标签: c# selenium-webdriver nunit pageobjects

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

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

我该怎么做?

在下面的代码中-页面是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"));
    }

}

1 个答案:

答案 0 :(得分:2)

对于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
}