gpt4 book ai didi

c# - Nsubstitute:收到检查错误的方法

转载 作者:行者123 更新时间:2023-11-28 20:52:56 25 4
gpt4 key购买 nike

我有一个测试,其中 NSubstitute 检查假类中的错误调用。当我像下面的代码一样进行测试时,Received(...) 方法会检查值 factory.featureClassName 是否返回一次。

[Test]
public void CreateDataController_WhenCalled_CreatesServiceSettings()
{
var factory = Substitute.ForPartsOf<AbstractDataServiceFactoryFake>("fileName");

factory.CreateDataController();

factory.Received(1).CreateServiceSettings("fileName", factory.FeatureClassName);
}

为了测试(如预期的那样)方法 CreateServiceSettings(...) 被调用,我必须使用以下代码:

[Test]
public void CreateDataController_WhenCalled_CreatesServiceSettings()
{
var factory = Substitute.ForPartsOf<AbstractDataServiceFactoryFake>("fileName");
var featureClassName = factory.FeatureClassName;

factory.CreateDataController();

factory.Received(1).CreateServiceSettings("fileName", featureClassName);
}

看起来,Recieved() 方法并没有直接连接到调用后给出的方法。谁能解释一下,为什么会这样?

最佳答案

这是 NSubstitute 语法的限制。

让我们分析一下第二个代码示例发生了什么:

factory
.Received(1) // ... check the next call has previously been received
.CreateServiceSettings("fileName", className)
// call is made to CreateServiceSettings, NSub checks
// it was received.

在第一个代码示例中,我们改为:

factory
.Received(1) // ... check the next call has previously been received
.CreateServiceSettings("fileName", factory.FeatureClassName)
// before CreateServiceSettings is invoked, its arguments
// must be evaluated. So factory.FeatureClassName
// is called next and NSubstitute checks that.

换句话说,NSubstitute 看到第二个代码示例是这样的:

var _ = factory.Received(1).FeatureClassName;
factory.CreateServiceSettings("fileName", _);

为避免这种情况,避免在断言(如 Received)或配置(如 Returns)期间回调替代品是很有用的。

关于c# - Nsubstitute:收到检查错误的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38520147/

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