3

我正在尝试使用 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>'

这是相关的代码。如果需要,我可以提供更多。

测试库.cs

public class TestBase<TController, TObject, TRepo>
where TController : IRMCController<TObject>
where TRepo : IRMCRepository
{
    public Mock<TRepo> Repo { get; set; }
}

公司Test.cs

public class CompaniesTest : TestBase<CompaniesController, Company, ICompanyRepository>

谢谢你的帮助。

4

1 回答 1

5

在 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# 中是基本的。

于 2013-04-19T20:31:17.110 回答