不要在测试中共享静态属性

问题描述 投票:0回答:1

我必须使用xUnit为现有代码编写测试。这是我面临的一个简化问题:

using Xunit;

namespace XUnitTestProject1
{
    public class UnitTest1
    {
        [Fact]
        public void Test1()
        {
            GlobalHanler.StaticProperty = "some value";
        }

        [Fact]
        public void Test2()
        {
            Assert.Null(GlobalHanler.StaticProperty);
        }
    }

    public static class GlobalHanler
    {
        public static string StaticProperty;
    }
}

GlobalHandler拥有另一个对象,它们都是静态的

[我一起运行2个测试时,Test2失败,因为它可以看到在Test1中设置的值。但是,当我单独运行Test2时,它会成功。

我的目标是让两个测试一起运行时通过。我需要以某种方式分别重置每个测试的全局静态属性,但是我无法更改GlobalHandler

的实现

在每个测试方法中设置StaticProperty似乎不是一种选择,因为它将影响并行运行的其他测试

c# .net unit-testing .net-core xunit.net
1个回答
0
投票

为了拥有可测试的代码,您应该首先将逻辑放在可以根据需要创建多次的类中,然后通过传递引用在代码中使用该类。

您的生产代码始终可以使用单例,但是由于没有直接引用该单例,因此可以测试。

由于可能的副作用和不清楚的依赖关系,单例和测试不能很好地共存。

© www.soinside.com 2019 - 2024. All rights reserved.