我创建了一个nunit测试项目,其中包含5个不同testfixture中的许多集成测试。我有一个叫做ConfigSettings
的类,它具有[SetupFixture]
属性和一个具有[SetUp]
属性的方法,它基本上连接到数据库以检索设置。检索到的设置应该在整个测试过程中使用。5个不同的testfixture都继承自这个类ConfigSettings
。
我注意到SetupFixture
[setup]
方法是为每个测试运行的,所以我使用了一个标志' HasRun
'来避免这种情况。然而,当TestFixture1准备好并且运行器转到TestFixture2时,HasRun
将再次为0,因为将创建一个新实例。我怎么能有SetupFixture
属性类只运行一次在TestSuite的开始?一个解决方案是使HasRun
属性和所有其他属性为静态,但是如果我打开一个新的NUnit实例,属性将具有与第一个实例相同的值。有什么想法吗?
这是我想做的一个示例代码:
下面是SetupFixture类,它应该在项目开始时在任何其他测试fixture之前运行:-
[SetUpFixture]
public class ConfigSettings
{
private static string strConnectionString = @"connectionStringHere";
public string userName { get; set; }
public string userId { get; set; }
public int clientId { get; set; }
public int isLive { get; set; }
public int HasRun { get; set; }
[SetUp]
public void GetSettings()
{
if (HasRun != 1)
{
Console.WriteLine("executing setup fixture..");
HasRun = 1;
using (var db = new autodb(strConnectionString))
{
var currentSession = (from session in db.CurrentSessions
where session.TestSuiteID == 1
orderby session.TestStarted descending
select session).FirstOrDefault();
userId = currentSession.UserId.ToString();
clientId = currentSession.ClientID;
isLive = currentSession.IsLive;
etc...
}
}
}
}
现在从每个TestFixture我继承ConfigSettings类和访问它的属性,例如:-
[TestFixture]
public class TestFixture1: ConfigSettings
{
[Test]
public void Test1()
{
Console.WriteLine("executing test 1...");
Console.WriteLine(userId);
}
[Test]
public void Test2()
{
Console.WriteLine("executing test 2...");
Console.WriteLine(clientId);
}
}
谢谢。
正如您已经知道的,SetUp
只运行一次,SetupFixture
在测试前每次运行一次。
所以要回答你的问题. How can I have the SetupFixture attribute class run only once at the beginning of the TestSuite?
最简单的方法就是用SetUp
代替SetupFixture