【问题标题】:Nsubstitute: Received checks wrong methodNsubstitute:收到检查错误的方法
【发布时间】:2016-07-22 07:01:19
【问题描述】:

我有一个测试,其中 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() 方法并没有直接连接到调用后给出的方法。谁能解释一下,为什么会这样?

【问题讨论】:

    标签: c# testing nunit nsubstitute


    【解决方案1】:

    这是 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)期间调用替代是有用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多