1

こんにちは、Unity IoC コンテナーと Moq を使用しているときに単体テストを少し行うために、テスト プロジェクトをセットアップしようとしています。

Unity でタイプを登録しようとすると、エラーが発生するようです。これが私のコードです。

public static class SetupMockObjects
{
    public static IProductRepository GetProductRepository() {
        Mock<IProductRepository> productRepository = new Mock<IProductRepository>();
        productRepository.Setup(m => m.Products).Returns(new List<Product> { 
            new Product { Name = "Football" , Price = 25 },
            new Product { Name = "Surf board" , Price = 179 },
            new Product { Name = "Running shoes" , Price = 95 }
        });

        return productRepository.Object;
    }
}

public static void Initialise()
{
    var container = BuildUnityContainer();
    DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}

private static IUnityContainer BuildUnityContainer()
{
     var container = new UnityContainer();
     container.RegisterType<IProductRepository , SetupMockObjects.GetProductRepository()>();
     return container;
}

ここでモック オブジェクトを作成しているのは、データ アクセス レイヤーを作成したくないという理由だけで、モック オブジェクトを作成するだけの方が簡単だと考えたからです。

問題は、タイプを登録しようとすると BuildUnityContainer() メソッド内にあり、次のエラーが発生します。

Error   1   Invalid expression term ',' 
Error   2   ; expected  
Error   3   ; expected  
Error   4   Invalid expression term ')' 
Error   5   ) expected  

正しい汎用パラメーターを使用して RegisterType を呼び出していると確信しているため、これらのエラーがスローされる理由がわかりません。どこで間違いを犯しましたか?

4

1 に答える 1

2

SetupMockObjects.GetProductRepository()型引数として使用しようとしています。それはうまくいきません - 型引数は型 (または型パラメータ) の名前でなければなりません。通常の引数として使用するつもりだったと思われます。

container.RegisterInstance<IProductRepository>(SetupMockObjects.GetProductRepository());

または、より読みやすく:

var repository = SetupMockObjects.GetProductRepository();
container.RegisterInstance<IProductRepository>(repository);

または、型推論が機能する場合(宣言を確認するためのドキュメントが目の前にありません)、次を使用できます。

container.RegisterInstance(SetupMockObjects.GetProductRepository());

結局、メソッドの戻り値の型は、指定したい型引数と同じです。

インターフェイスを特定のインスタンスにバインドしようとしているだけなので、呼び出しを からRegisterTypeに変更したことに注意してください。RegisterInstance

于 2013-05-10T13:22:31.670 に答える