为Mock提供泛型
本文关键字:泛型 Mock | 更新日期: 2023-09-27 18:10:01
我正试图在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>
谢谢你的帮助。
在Moq中,Mock<T>
类在其泛型类型上有一个class
约束。以下是它的定义:
public class Mock<T> : Mock where T : class
因此,如果您打算在类中使用它,那么除了IRMCRepository
:之外,还必须定义相同的class
约束
public class TestBase<TController, TObject, TRepo>
where TController : IRMCController<TObject>
where TRepo : class, IRMCRepository
{
public Mock<TRepo> Repo { get; set; }
}
现在你的代码要编译了。这是C#中的基本generic constraints
。