gpt4 book ai didi

c# - 运行单元测试时如何处理静态初始化?

转载 作者:太空宇宙 更新时间:2023-11-03 15:55:26 25 4
gpt4 key购买 nike

我有一些运行良好的代码,但我也会为它添加单元测试。我的问题不是测试本身,而是静态初始化(构造函数和字段)——它们没有被执行。

AFAIK 静态初始化在第一次“触摸”时执行。我有这样的东西(依赖链):

public class A 
{
public static readonly AFoo = "afoo";
}

public class B
{
public static readonly BFoo = new BFoo(A.AFoo);
}

public class C
{
public static readonly CFoo = new CFoo(B.BFoo);
}

并且在运行单元测试时,我在随机位置看到空值,例如突然 A.AFoo 不是空值,但是 B.BFoo 是。

再次“正常”运行代码时一切正常。

我应该怎么做才能使静态初始化一如既往地工作?

为了记录,我使用的静态字段是常量,通常是 EmptyIdentifierEmptyPositionNoCoordinates,所以我不必始终使用类似 new Vector3d(0,0,0) 的东西。

最佳答案

以下测试工作正常:

using FluentAssertions;

[TestClass]
public class SomeTests
{
[TestMethod]
public void TestTransitiveDependencies()
{
C.CFoo.BFoo.str.Should().Be("afoo");
}
}

我已经定义了类似于你的代码。

public class A { public static readonly string AFoo = "afoo"; }
public class B { public static readonly BFoo BFoo = new BFoo(A.AFoo); }
public class C { public static readonly CFoo CFoo = new CFoo(B.BFoo); }

但它没有编译,尽管我添加了这些类。

public class BFoo
{
public readonly string str;
public BFoo(string str) {this.str = str;}
}

public class CFoo
{
public readonly BFoo BFoo;
public CFoo(BFoo bFoo) {this.BFoo = bFoo;}
}

单个项目中的所有设置似乎都运行良好。也许我们需要更多关于您的设置的信息。

工具链:VS2012 IDE、.NET 4.5 运行时、Win7 操作系统

包.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="FluentAssertions" version="2.2.0.0" targetFramework="net45" />
</packages>

关于c# - 运行单元测试时如何处理静态初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23858267/

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