Все вызовы на макете должны иметь соответствующую настройку при установке строкового параметра - PullRequest
0 голосов
/ 08 июня 2018

У меня есть простой метод, который я тестирую.Когда я запускаю тест, я получаю сообщение об ошибке

«Все вызовы на макете должны иметь соответствующую настройку»

в последней строке

dataField.DefaultValue = orderNumber.ToString();

Что бы это вызвало?

Я просто устанавливаю поле.

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();
}

Это код моего модульного теста.

[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);
}

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы используете "Строгий макет" , который считается плохой практикой (за исключением редких случаев).Причина плохой практики довольно проста;Ваш UT стал слишком зависимым от реализации вместо проверки поведения конкретного случая.

Просто удалите MockBehavior.Strict из ложной инициализации, и тогда все будет работать нормально.

0 голосов
/ 08 июня 2018

Если вы хотите, чтобы свойства макета сохранили присвоенные значения, вызовите SetupAllProperties

corelDataField.SetupAllProperties();

. Первоначальная настройка

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

была только для получения значения, а не его установки.

Когда вы звоните

dataField.DefaultValue = orderNumber.ToString();

Вы пытаетесь установить свойство.Что макет не был настроен для обработки.

Ссылка: Быстрый запуск Moq

...