nunit 可以配置为删除每个固定装置(或每个测试)的应用程序域

发布于 2024-08-22 18:34:36 字数 77 浏览 2 评论 0 原文

在测试单例类时,我们需要单个实例在每次测试后“消失”。有没有办法配置 nunit 在每次测试后或至少在每个固定装置后重新创建测试应用程序域?

In testing singleton classes we need the single instance to "go away" after each test. Is there a way to configure nunit to recreate the test app domain after each test, or at least after each fixture?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

明月夜 2024-08-29 18:34:36

您可以在通过条件方法进行测试时提供更新单例实例的方法。

//  CUT
public sealed class Singleton{

    private static Singleton _instance = new Singleton();

    private Singleton()
    {
         //  construct.
    }

    public static Singleton Instance{
        get{
            return _instance;
        }
    }

    [Conditional ("DEBUG")]
    public static void FreshInstance (){
          _instance = new Singleton();
    }
}


//  NUnit
[TestFixture]
public class SingletonTests{

    [SetUp]
    public void SetUp(){
        Singleton.FreshInstance();
    }
}

You could provide the means to renew the singleton instance when testing via a conditional method.

//  CUT
public sealed class Singleton{

    private static Singleton _instance = new Singleton();

    private Singleton()
    {
         //  construct.
    }

    public static Singleton Instance{
        get{
            return _instance;
        }
    }

    [Conditional ("DEBUG")]
    public static void FreshInstance (){
          _instance = new Singleton();
    }
}


//  NUnit
[TestFixture]
public class SingletonTests{

    [SetUp]
    public void SetUp(){
        Singleton.FreshInstance();
    }
}
坠似风落 2024-08-29 18:34:36

我需要做完全相同的事情,所以我创建了一个库,它基本上接受当前测试并在新的 AppDomain 中重新执行它。这是一个名为 NUnit.ApplicationDomain 的 nuget 包,并且是 开源

示例代码:

[Test, RunInApplicationDomain]
public void Method()
{
  Console.WriteLine("I'm in a different AppDomain")
}

相关 StackOverflow 答案

I needed to do the the exact same thing, so I created a library which basically takes the current test and re-executes it in a new AppDomain. It's a nuget package called NUnit.ApplicationDomain and is open source.

Example Code:

[Test, RunInApplicationDomain]
public void Method()
{
  Console.WriteLine("I'm in a different AppDomain")
}

Related StackOverflow Answer

眼趣 2024-08-29 18:34:36

我想我在这里遗漏了一些东西,拉尔夫。只是为了我自己的利益,您能否解释一下为什么向您的测试类添加具有以下属性的方法来删除并重新创建您的实例对您不起作用?

为方法添加这些属性应该使它们在每次测试之前/之后运行。

[SetUp]

[TearDown] 

为方法添加这些属性应该使它们在夹具之前/之后运行。

[TestFixtureSetUp]

[TestFixtureTearDown]

使用具有这些属性的方法无法在测试之间创建和销毁域是否有原因?

I guess I'm missing something here Ralph. Just for my own benefit, can you explain why adding methods with the following attributes to your Test Class that drop and recreate your instances wouldn't work for you?

Adding these attributes for methods should make them run before / after each test.

[SetUp]

[TearDown] 

Adding these attributes for methods should make them run before / after the fixture.

[TestFixtureSetUp]

[TestFixtureTearDown]

Is there a reason why using methods with these attributes couldn't create and destroy your domain between tests?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文