gpt4 book ai didi

c# - NSubstitute - 伪造一个调用另一个虚拟方法的虚拟方法

转载 作者:行者123 更新时间:2023-12-02 21:08:25 25 4
gpt4 key购买 nike

我有一个看起来像这样的类(class):

public class MyClass
{
public virtual bool A()
{
return 5 < B();
}

protected virtual int B()
{
return new Random.Next(1, 10);
}
}

在为 MyClass 编写测试时,能够执行以下操作会很方便:

[Fact]
public void Blabla()
{
var o = Substitute.ForPartsOf<MyClass>();
o.A().Returns(true);

Assert.True(o.DoSomethingElse());
}

但是,这不起作用。我收到运行时异常:

NSubstitute.Exceptions.CouldNotSetReturnDueToTypeMismatchException

Can not return value of type Boolean for MyClass.A (expected type int).

有没有办法解决这个问题,或者我是否必须创建一个覆盖 A 的具体测试 double 类?

最佳答案

我通过修改测试代码解决了这个问题,如下所示:

var o = Substitute.ForPartsOf<MyClass>();
o.When(x => x.A()).DoNotCallBase();
o.A().Returns(true);

Assert.True(o.DoSomethingElse());

这可以防止伪造者在以下 Returns() 调用中调用实际实现。

关于c# - NSubstitute - 伪造一个调用另一个虚拟方法的虚拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34876571/

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