Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 静态类实例+;集成测试_C#_.net_Class_Static_Nunit - Fatal编程技术网

C# 静态类实例+;集成测试

C# 静态类实例+;集成测试,c#,.net,class,static,nunit,C#,.net,Class,Static,Nunit,我已经创建了一个nunit测试项目,在5个不同的测试夹具中进行了大量的集成测试。我有一个名为ConfigSettings的类,它具有[SetupFixture]属性和一个具有[SetUp]属性的方法,该属性基本上连接到数据库以检索设置。在整个测试过程中应使用检索到的设置。5个不同的TestFixture都继承自此类ConfigSettings 我注意到每次测试都会运行SetupFixture[setup]方法,因此我使用了一个标志“HasRun”来避免这种情况。但是,当TestFixture1准

我已经创建了一个nunit测试项目,在5个不同的测试夹具中进行了大量的集成测试。我有一个名为
ConfigSettings
的类,它具有
[SetupFixture]
属性和一个具有
[SetUp]
属性的方法,该属性基本上连接到数据库以检索设置。在整个测试过程中应使用检索到的设置。5个不同的TestFixture都继承自此类
ConfigSettings

我注意到每次测试都会运行
SetupFixture
[setup]
方法,因此我使用了一个标志“
HasRun
”来避免这种情况。但是,当TestFixture1准备就绪并且运行程序转到TestFixture2时,
HasRun
将再次为0,因为将创建一个新实例。如何让
SetupFixture
属性类在测试套件开始时只运行一次?解决方案是将
HasRun
属性和所有其他属性设置为静态,但是如果我打开NUnit的新实例,这些属性将具有与第一个实例相同的值。有什么想法吗

问题基本上是静态类的第二个实例仍然会检索第一个实例的属性值,如果我用新设置覆盖它们,第一个实例将使用第二个实例的值。这种行为有解决办法吗

这是我试图做的一个示例代码:

下面是SetupFixture类,该类应在项目开始时运行,然后再运行任何其他testfixture:-

[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);
    }
}

谢谢。

因为您已经知道,
设置只运行一次,并且
SetupFixture
在测试前每一刻都运行一次


因此,请回答您的问题
。如何让SetupFixture属性类在测试套件开始时只运行一次?
最简单的方法是使用
SetUp
而不是
SetupFixture

听起来您可能误用了属性。请向我们展示您正在使用的代码。为什么要使用NUnit进行集成测试?您可能希望在方法上使用FixtureSetup属性,而不是SetupFixture类。NUnit中没有FixtureSetup,但是在新的TestFixture开始时运行TestFixtureSetup。已根据添加的代码示例是具有设置属性的方法将在每次测试之前运行。然而,我需要的是一个在每个testfixture之前运行的方法,就像项目的入口点一样,它检索设置,然后所有类都可以继承这些设置。我会发布一些代码,这样你可以得到一个清晰的图片