如何在每个测试方法(包含在同一个测试夹具中)之前每次初始化一个实例变量(在 nunit 的测试夹具中声明)?
How to initialize an instance variable (declared in a test fixture in nunit) every time before each test method(contained in the same test fixture)?
我在 vs2015 的同一个测试夹具下有 3 个 nunit 测试用例。当我 运行 单独测试用例时,它们通过了。但是当我 运行 他们在一起时,第一个测试用例通过了,其他的都失败了。
因为我有一个实例变量,即测试夹具中的 c# 属性,它在第一个测试用例执行之前被初始化。这只在第一个测试用例 运行 之前初始化,我希望这个 属性 在每个测试用例开始之前初始化。但是发生的事情是 - 它在第一个测试用例 运行 之前初始化一次,第二个和第三个测试用例使用相同的值。因此我的第二个和第三个测试用例失败了。
我该怎么做?
在下面的代码中 - 页面是 c# 属性 - 执行登录,登录后单击适当的 link 并带您到目标页面。
这是代码,
[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 定义一个方法,该方法将 运行 在测试夹具中的每个测试中执行一次。由于您的页面 属性 可能需要为每个 运行 进行设置,您可以使用如下内容:
[TestFixture]
public class SecurityUserMgmtTests
{
protected override SecurityUserManagementPage Page {get;set;}
[SetUp]
public void Init() => Page = new LoginPage().LoginasAdmin().GoToSecurityUserMgmtPage();
// Tests omitted
}
我在 vs2015 的同一个测试夹具下有 3 个 nunit 测试用例。当我 运行 单独测试用例时,它们通过了。但是当我 运行 他们在一起时,第一个测试用例通过了,其他的都失败了。
因为我有一个实例变量,即测试夹具中的 c# 属性,它在第一个测试用例执行之前被初始化。这只在第一个测试用例 运行 之前初始化,我希望这个 属性 在每个测试用例开始之前初始化。但是发生的事情是 - 它在第一个测试用例 运行 之前初始化一次,第二个和第三个测试用例使用相同的值。因此我的第二个和第三个测试用例失败了。
我该怎么做?
在下面的代码中 - 页面是 c# 属性 - 执行登录,登录后单击适当的 link 并带您到目标页面。
这是代码,
[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 定义一个方法,该方法将 运行 在测试夹具中的每个测试中执行一次。由于您的页面 属性 可能需要为每个 运行 进行设置,您可以使用如下内容:
[TestFixture]
public class SecurityUserMgmtTests
{
protected override SecurityUserManagementPage Page {get;set;}
[SetUp]
public void Init() => Page = new LoginPage().LoginasAdmin().GoToSecurityUserMgmtPage();
// Tests omitted
}