Насмешка над методом присвоения значения полю в Model C# Moq - PullRequest
0 голосов
/ 01 апреля 2020

Мне нужно добавить в модель метод, который с учетом некоторых параметров присваивает значение одному из полей модели.

public class ModelName: SomeModel<ModelName>, IModelName
{
    [Field]
    public string SomeField{ get; set; }

    [Field]
    public string FieldSetByMethod{ get; set; }

    public new async Task MethodToSetField(string parameter)
    {
        var someClassInstance = new SomeExternalClass(parameter);
        FieldSetByMethod = someClassInstance(parameter).method();
    }
}

Теперь, когда я пишу модульные тесты и хочу иметь способ проверить, что этот MethodToSetField был вызван. Однако на самом деле я не могу вызвать метод MethodToSetField, поскольку создание SomeExternalClass нежелательно (например, потому что он создает уникальный идентификатор).

У меня нет опыта ни с C#, ни с Moq. Как я могу издеваться над этой функцией, чтобы она велась примерно так:

ModelNameInstance.Setup(c => c.MethodToSetField("Parameter")).Assigns(FieldSetByMethod,"DummyValue");

Или, может быть, я могу каким-то образом реструктурировать тесты кода / записи таким образом, чтобы имитировать это поведение?

1 Ответ

1 голос
/ 01 апреля 2020

Вы можете добавить ISomeExternalClass в этот класс, а затем смоделировать его и проверить на ложность, или, если вы не можете этого сделать, - ввести ISomeExternalClassFactory в этот класс и затем смоделировать его. ISomeExternalClassFactory mock возвращает макет ISomeExternalClass, который вы можете настроить и проверить.

...