c# - 不要在测试中共享静态属性
问题描述
我必须使用 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
单独运行时,它会成功。
我的目标是让 2 个测试一起运行时通过。我需要以某种方式分别为每个测试重置全局静态属性,但我无法更改GlobalHandler
在每个测试方法中设置StaticProperty
似乎不是一个选项,因为它会影响并行运行的其他测试
解决方案
为了获得可测试的代码,您应该首先将逻辑放在一个可以根据需要创建多次的类中,然后通过传递引用在您的代码中使用该类。
您的生产代码始终可以使用单例,但没有对单例的直接引用使其可测试。
由于可能的副作用和不明确的依赖关系,单例和测试不能很好地共存。
推荐阅读
- python - 有没有办法让一个类添加多处理共享值?
- haskell - mapMaybe 用于 Data.Map 中的键
- r - 使用 knitr 从 Rmarkdown 创建 PDF 时减少上边距
- html - Flexbox 居中对齐无法按预期工作
- java - 枚举不会在 Spring 中存储在数据库中
- php - 我无法使用 Laravel 连接到 Postgresql
- css - React:仅显示完全适合弹性框的项目,并动态确定要显示的项目数
- flutter - 更新路径:找不到 Flutter 的命令
- wordpress - Wordpress:Elementor 自定义查询过滤器 - 仅显示未来事件
- python - 如何在 Python 中分隔 2 个或更多句子?