#moq
#moq
Вопрос:
Рассмотрим следующий фрагмент;
public enum ReportType {Monthly,Quarterly}
public class BaseReport
{
public ReportType ReportType {get;set;}
}
public class MonthlyReport : BaseReport
{
public String month = "January"
public MonthlyReport() { ReportType = Monthly;}
}
public class Foo
{
public virtual void AddReport(BaseReport report);
}
[Test]
public void Test1()
{
var mock = new Mock<Foo>(){CallBase =true};
var report = new MonthlyReport();
mock.Object.AddReport(report);
}
Ну, я пытаюсь проверить, вызывается ли AddReport() с определенным параметром здесь;
mock.Verify(x => x.AddReport(It.Is<MonthlyReport>(p => p.month == "January" amp;amp;
p.ReportType == ReportType.Monthly)));
Как я и опасался, он не работает с параметром MonthlyReport для Is<>, даже если он получен из BaseReport . Если я использую Is , то я не могу использовать p.month в выражении, и я не настолько хорошо разбираюсь в c #, чтобы знать, могу ли я использовать if(p is MonthlyReport) в лямбда-выражении или, что более важно, оно будет работать по назначению.
Как я могу подойти к этой проблеме? Пожалуйста, обратите внимание, что макет является частичным, хотя я могу смириться с подходом настройки с обратными вызовами, если он аккуратно решает мою проблему. Любые указатели будут высоко оценены…
Комментарии:
1. Я не понимаю, что вы пытаетесь сделать. Вы вызываете AddReport в самом тесте. Почему вам также нужно проверять, что вы его вызвали? Разве вы не должны использовать Verify только тогда, когда хотите убедиться, что какой-то реальный код вызвал метод?
2. это всего лишь пример, который я привел, чтобы продемонстрировать проблему, в реальном коде я внедряю макет в тестируемый класс, и на самом деле это не проблема.
3. Просто запустил ваш код, и он работает для меня.
4. Будь я проклят. Да, вы правы. Проблема заключалась не в общем параметре, а в предположении, которое я сделал в предикате (в терминах этого примера месяц не был январем). В этом случае мне нужна лучшая отчетность, я задаюсь вопросом Assert. isTrue(p.month== «Январь») будет работать в выражении