Nsubstitute:收到检查错误的方法
Nsubstitute: Received checks wrong method
我有一个测试,其中 NSubstitute 会检查假冒的错误调用 class。当我像下面的代码一样进行测试时,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
)期间调用替代项很有用。
我有一个测试,其中 NSubstitute 会检查假冒的错误调用 class。当我像下面的代码一样进行测试时,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
)期间调用替代项很有用。