2013-05-10 148 views
1

嗨我正在嘗試設置一個測試項目,以便在使用Unity IoC容器和Moq時實現一些單元測試。RegisterType導致錯誤

我似乎得到一個錯誤,當我嘗試註冊在Unity.This類型是我的代碼:

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 

我prety相信我打電話RegisterType用正確的泛型參數這就是爲什麼我不明白爲什麼會出現這些錯誤。我犯了什麼錯誤?

回答

2

您試圖使用SetupMockObjects.GetProductRepository()作爲類型參數。這不起作用 - 類型參數必須是類型的名稱(或類型參數)。我懷疑你的意思是把它當作一個普通的說法:

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

或許更可讀:

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

或者,如果類型推斷的工作(我沒有文檔在我面前檢查聲明)您可以使用:

container.RegisterInstance(SetupMockObjects.GetProductRepository()); 

畢竟,該方法的返回類型與您要指定的類型參數相同。

請注意,我已將RegisterType的呼叫更改爲RegisterInstance,因爲您只是試圖將接口綁定到特定實例。