3

MVC プロジェクトを使用して、ソリューションでいくつかのテスト コードを一般化しようとしています。コントローラーごとに同じテストを作成しているため、ジェネリックを使用してそれを作成できるので、必要なテストは 1 つだけであると考えました。

残念ながら、現在エラーが発生しています: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>

助けてくれてありがとう。

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 に答える