gpt4 book ai didi

c# - 静态类实例+集成测试

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:43 44 4
gpt4 key购买 nike

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

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

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

这是我正在尝试做的示例代码:

下面是 SetupFixture 类,它应该在项目开始时在任何其他测试装置之前运行:-

[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 在测试前运行每个叉齿。

所以回答你的问题。我怎样才能让 SetupFixture 属性类在 TestSuite 开始时只运行一次? 最简单的方法是使用 SetUp 而不是 SetupFixture

关于c# - 静态类实例+集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16896581/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com