Я пытаюсь обобщить некоторый тестовый код в решении с проектом MVC. Поскольку мы пишем один и тот же тест для каждого контроллера, я подумал, что могу использовать дженерики, чтобы сделать это так, что нужен был только один тест.
К сожалению, в настоящее время я получаю сообщение об ошибке: Error 1 The type 'TRepo' must be a reference type in order to use it as parameter 'T' in the generic type or method 'Moq.Mock<T>'
Вот соответствующий код. При необходимости я могу предоставить больше.
TestBase.cs
public class TestBase<TController, TObject, TRepo>
where TController : IRMCController<TObject>
where TRepo : IRMCRepository
{
public Mock<TRepo> Repo { get; set; }
}
CompaniesTest.cs
public class CompaniesTest : TestBase<CompaniesController, Company, ICompanyRepository>
Спасибо за любую помощь.
1 ответ
В Moq класс Mock<T>
имеет ограничение class
на свой универсальный тип. Вот как это определяется:
public class Mock<T> : Mock where T : class
Поэтому, если вы собираетесь использовать это в своем классе, вы должны определить такое же ограничение class
в дополнение к IRMCRepository
:
public class TestBase<TController, TObject, TRepo>
where TController : IRMCController<TObject>
where TRepo : class, IRMCRepository
{
public Mock<TRepo> Repo { get; set; }
}
Теперь ваш код будет скомпилирован. Это базовый generic constraints
на C #.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.