gpt4 book ai didi

c# - 如何模拟/覆盖单元测试的只读字段

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

我正在使用 nj4x,它有一个具有如下只读字段的类。

   public class MarketInformation
{
public readonly double ASK;
public readonly double BID;
public readonly double DIGITS;
public readonly double EXPIRATION;
public readonly double FREEZELEVEL;
}

我正在为编写这些类的类和方法编写单元测试。对于隔离/模拟,我使用 Nsubstitute 和 MicrosoftFakes(主要是垫片)。我想覆盖这些字段,以便在我的方法中调用它们时,我可以获得可预测的测试结果。我为这个类生成了 shim,但它只提供给我一个构造函数,现在允许我对其进行初始化。有什么方法可以从此类外部设置这些字段吗?

最佳答案

它并不漂亮,但如果您有权访问需要修改的实例,则可以使用 the SetField method of the PrivateObject class . PrivateObject 类是 MS 单元测试框架的一部分。

例如,考虑类:

public class ClassWithReadOnly
{
public readonly string Foo;

public ClassWithReadOnly()
{
Foo = "bar";
}
}

您可以像这样设置只读字段:

var test = new ClassWithReadOnly();
Console.WriteLine("Before Foo == '{0}'", test.Foo);
var po = new PrivateObject(test);
po.SetField("Foo", "oof");
Console.WriteLine("After Foo == '{0}'", test.Foo);

输出将是:

Before Foo == 'bar'

After Foo == 'oof'

关于c# - 如何模拟/覆盖单元测试的只读字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41397210/

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