Cod*_*ula 3 c# generics asp.net-mvc moq
我试图在一个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; }
}
Run Code Online (Sandbox Code Playgroud)
CompaniesTest.cs
public class CompaniesTest : TestBase<CompaniesController, Company, ICompanyRepository>
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
在Moq中,Mock<T>类class对其泛型类型有约束.以下是它的定义:
public class Mock<T> : Mock where T : class
Run Code Online (Sandbox Code Playgroud)
所以如果你打算在你的类中使用它,你必须定义相同的class约束除了IRMCRepository:
public class TestBase<TController, TObject, TRepo>
where TController : IRMCController<TObject>
where TRepo : class, IRMCRepository
{
public Mock<TRepo> Repo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在你的代码将编译.这是generic constraintsC#的基础.