NSubstitute с объектом как параметр в Принятый вызов

Я использую NSubstitute для своих модульных тестов. Мне нужно проверить, что объект отправляется методу void внутри метода, который я тестирую. Мне нужно только проверить, что объект отправлен с одним из свойств, являющимся определенным значением.

например.

///The object in question
public class Person
{
   public string Name { get; set; }
   public string Surname{get;set;}
}

Два простых метода

public void NameStartsWithA(Person person)
{
  //do something to person when name starts with A
}

public void NameStartsWithB(Person person)
{
  //do something to person when name starts with B
}

Метод, на который я пишу тест.

public void MethodBeingTested()
{
  var person = new Person() {Name = "Adrian",Surname="SomeSurname"};

  if(person.Name.StartsWith("A"))
    NameStartsWithA(person);
  else
    NameStartsWithB(person);
}

Если имя человека начинается с буквы A, мне нужно проверить, используя NSubstitute, чтобы вызывалась «NameStartsWithA» с именем, которое начинается с буквы A.

Мой блок-тест пока выглядит примерно так

_someService.Received().NameStartsWithA(new Person(){Name="Adrian",Surname=Arg.Any()});

Но Nsubstitute говорит, что функция никогда не вызывалась, но когда я делаю тот же тест с «RecievedArgumentsAny ()», он проходит.

Надеюсь, этот пример поможет вам понять, чего я пытаюсь достичь.

8
nl ja de

1 ответы

заставил это работать. Проводка кода.

_someService.Received().NameStartsWith(Arg.Is(p => p.Name.Startswith== "A"));

надеется, что это поможет кому-то в будущем.

10
добавлено
Рад, что вы его работали. Другой подход, который вы можете попробовать, - это изменить MethodBeingTested , чтобы взять Person в качестве аргумента. Затем вы можете пройти через человека, имя которого начинается с «A» и проверять _someService.Received (). NameStartsWithA (человек) (и аналогично для «B»).
добавлено автор David Tchepak, источник
QA — вакансии и аналитика рынка вакансий
QA — вакансии и аналитика рынка вакансий
5 668 участник(ов)

Вакансии и поиск работы в сфере QA. Вопросы: @qa_ru Про деньги: @qa_fin При размещении вакансии указывать: - должность - компанию - требования к кандидату - условия и ЗП хэштеги: #город #типзанятости

QA — русскоговорящее сообщество
QA — русскоговорящее сообщество
3 625 участник(ов)

Общаемся про все виды тестирования и его автоматизацию. Без мата, грубостей и провокаций. События: @qaevents Вакансии: @qa_jobs Автоматизаторы: @qa_automation Слухи про компании: @qa_bad_company

QA juniors
QA juniors
2 720 участник(ов)

Добро пожаловать в чат джуниоров QA! Общаемся обо всём, что связано с тестированием и не только :) В чате царит дружественная атмосфера, поэтому общаемся без мата, грубостей. @qa_automation - автоматизация @serious_tester - для тестировщиков и QA

QA - Bad Company!
QA - Bad Company!
2 602 участник(ов)

Позитив и негатив про компании или курсы, куда не стоит идти работать или учиться, а куда стоит. За пиратский контент - бан. @qa_fin о деньгах Русскоговорящее сообщество: @qa_ru Флудилка: @qaFlood Вакансии: @qa_jobs Финансы: @qa_fin

QA — Автоматизация
QA — Автоматизация
2 434 участник(ов)

1. Обсуждение технологий автоматизированного тестирования 2. Помощь начинающим Ru-сообщество: @qa_ru Джуночат: @qajuniors Вакансии: @qa_jobs Финансы: @qa_fin Митапы и события: @qaevents Паблики: @serious_tester, @automation_remarks, @atinfo

QA - Finance
QA - Finance
1 347 участник(ов)

Чат о деньгах тестировщиков. ЗП, релокейты,оферы. @qa_bad_company - обсуждение компаний/курсов и карьерного роста для QA @qa_automation - авто QA Холивары, политика, религия-бан Реклама, спам, оскорбления - бан Для флуда используйте другой чат