设置字符串参数时,对模拟的所有调用都必须具有相应的设置 [英] All invocation on the mock must have a corresponding setup when setting string parameter

查看:112
本文介绍了设置字符串参数时,对模拟的所有调用都必须具有相应的设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个正在测试的简单方法.运行测试时,出现错误

I have a simple method I am testing. When I run the test I get the error

模拟中的所有调用都必须具有相应的设置"

"All invocation on the mock must have a corresponding setup"

在最后一行

dataField.DefaultValue = orderNumber.ToString();

这是什么原因造成的?

What would cause this?

我只是在设置一个字段.

I am just setting a field.

void IUtilities.SetOrderIdInDocumentMetaData(Document document, int orderNumber)
{
    DataField dataField = null;
    if (document.DataFields.IsPresent(ORDER_ID) == false)
    {
        dataField = document.DataFields.Add(ORDER_ID, AppDefault: false, DocDefault: false);
    }
    else
    {
        dataField = document.DataFields[ORDER_ID];
    }

    dataField.DefaultValue = orderNumber.ToString();
}

这是我的单元测试代码.

This is my unit test code.

[TestMethod]
public void Utilities_SetOrderIdInDocumentMetaData_SetNew()
        {
    string orderNumber = "1";
    int orderId = 1;

    corelDocument
        .Setup(s => s.DataFields.IsPresent(ORDER_ID))
        .Returns(false);

    corelDocument
        .Setup(s => s.DataFields.Add(ORDER_ID, null, false, false, false))
        .Returns(corelDataField.Object);

    corelDataField
        .Setup(s => s.DefaultValue)
        .Returns(orderNumber);

    Utilities.SetOrderIdInDocumentMetaData(corelDocument.Object, orderId);

    Assert.AreEqual(orderNumber, corelDataField.Object.DefaultValue);
}

推荐答案

如果您希望模拟的属性保留分配的值,请调用SetupAllProperties

If you want the mock's properties to retain assigned values, call SetupAllProperties

corelDataField.SetupAllProperties();

您的初始设置

corelDataField
    .Setup(s => s.DefaultValue)
    .Returns(orderNumber);

仅用于获取值,而不是对其进行设置.

was only for getting the value, not setting it.

致电时

dataField.DefaultValue = orderNumber.ToString();

您正在尝试设置属性.尚未设置要处理的模拟程序.

You are trying to set the property. Which the mock was not setup to handle.

参考资料: Moq快速入门

这篇关于设置字符串参数时,对模拟的所有调用都必须具有相应的设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆