2013-07-02 53 views
3

我似乎有問題,我有一個類(LoginService),它在構造函數中接受一個I​​User。這是爲了執行集成測試而不是單元測試,因此我不想MOCK這些,我已經進行了一些單元測試,並且他們使用Moq與夾具一起工作得很好。AutoFixture:無法創建一個實例,可能沒有公共構造函數

設置我的燈具: -

var fixture = new Fixture(); 

然後,我希望能夠凍結一個版本的IUSER的,我曾嘗試以下,但我無法得到它的工作,它抱怨說,它不能創建實例,可能是由於沒有構造函數。

var user = fixture.Freeze<IUser>(); 

所以我設法得到它的工作做了以下

IUser user = new User(); // Create my IUser manually 
    fixture.Inject(user); 

,最後創建SUT果然實例被注入。

var sut = fixture.Create<LoginService>(); 

所以我這樣做是正確的嗎?我不能使用Freeze,我應該繼續手動創建我的IUser並將其注入到夾具中?

期待任何幫助或信息

+0

我當然可以採取autofixture的方程,但我認爲它即使不嘲笑也派上用場,即我可以做var user = new User(); var sut = new LoginService(user); – Martin

回答

4

是的,這是正確的 - 如果你要提供的IUser一個具體的例子,你必須注入它的LoginService

請記住,Inject將影響IUser的所有後續請求(如果有)。

+0

好的,所以我會永遠得到那個實例?那麼這是做到這一點的正確方法? – Martin

+0

*技術上*你在做什麼是正確的:) –

+0

感謝您的確認 – Martin

3

尼科斯Baxevanis的答案是正確的,但有很多方法來皮膚那隻貓。

如果不是同一個用戶實例,你想有一個例如每一次,你還可以映射UserIUser

fixture.Customizations.Add(
    new TypeRelay(
     typeof(IUser), 
     typeof(User))); 
+0

太棒了!謝謝,值得注意的是 – Martin

相關問題