Невозможно подтвердить вызов на макете в c# - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть вызов метода SaveDocument() в классе DocumentStorageHandler

DocumentManagementRequestModel docRequest=new DocumentManagementRequestModel
{
  Parameters = parameters,
  ProviderAlias = providerAlias
};
 _documentSaver.SaveDocument(docRequest);

, а класс Parameter имеет вид

public class DmuParameter
{
    public string Name { get; set; }
    public Object Value { get; set; }
    public string ParameterDirection { get; set; }
    public string Category { get; set; }
}

Когда я пытаюсь написать модульный тест для него, он терпит неудачу с "Ожидаемым вызовом на макет по крайней мере один раз, но никогда не был выполнен".

_mockedDocumentSaver.Setup(d => d.SaveDocument(
            It.Is<DocumentManagementRequestModel>(
                d => d.Parameters.Exists(
                  p => p.Category == "category"
                   && p.Name == "FileLocation"
                   && p.Value.ToString() == "\\\\charon.cmiprog.com\\Devinet\\Documaker\\Api\\Temp\\1234567-00-00000-IdCardsPL.pdf"
                    && p.ParameterDirection == "Input"))));

_mockedDocumentSaver.Verify(c=>c.SaveDocument(It.Is<DocumentManagementRequestModel>(
            d=>d.Parameters.Exists(p=>
                    p.Category == "category"
                    && p.Name == "FileLocation"
                    && p.Value.ToString() == 
"\\\\charon.cmiprog.com\\Devinet\\Documaker\\Api\\Temp\\1234567-00-00000-IdCardsPL.pdf"
                    && p.ParameterDirection == "Input"
                ))),Times.AtLeastOnce);

Разве это не правильный способ, которым я проверяю вызов на макете. Я не уверен, что мне не хватает.

Для дополнительной информации прикреплены снимки экрана. The mock verification screen shot In code

1 Ответ

0 голосов
/ 24 апреля 2020

Исходя из того, что вы указали, это выглядит как проблема равенства строк в Parameter.Value

На снимке экрана с точкой прерывания в нижнем регистре 'dev inet' указано

enter image description here

В проверочном скриншоте точки останова 'Dev Inet' - смешанный регистр

enter image description here

In выражения установки / проверки в OP, это 'Dev inet'

Настройка:

&& p.Value.ToString() == "\\\\charon.cmiprog.com\\Devinet\\Documaker\\Api\\Temp\\1234567-00-00000-IdCardsPL.pdf"

Проверка:

&& p.Value.ToString() == "\\\\charon.cmiprog.com\\Devinet\\Documaker\\Api\\Temp\\1234567-00-00000-IdCardsPL.pdf"

Я бы запустил свой Посмотрите на корпус. Условие равенства CI может помочь с вашей отладкой

&& p.Value.ToString().Equals("\\\\charon.cmiprog.com\\Devinet\\Documaker\\Api\\Temp\\1234567-00-00000-IdCardsPL.pdf", StringComparison.CurrentCultureIgnoreCase)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...