2011-10-05 101 views
4

我有一個工廠,看起來像如下:起訂量與構造函數參數

public IFoo GetFoo(IFile file) 
{ 
    return _kernel.Get<IFoo>(new ConstructorArgument("file", file)); 
} 

它,直到我用的起訂量正常工作嘲笑IFoo。在模擬中沒有名爲file的構造函數參數,並且我得到一個Ninject.ActivationException。

我應該如何解決這個問題?

+4

有些東西有異味,你不需要在單元測試中使用你的IoC容器。 – BFree

+0

同意@BFree。在工廠內使用Ninject內核也有點味道。請參閱http://stackoverflow.com/questions/6277771/what-is-a-composition-root-in-the-context-of-dependency-injection – TrueWill

+0

爲什麼當你想模擬一個接口時你想傳遞一個參數? –

回答

3

你應該在測試過程中嘲笑你的工廠。希望「GetFoo」方法是您的工廠界面的一部分。嘲笑工廠,然後你可以建立工廠來返回你想要的任何IFoo(一個測試IFoo或者一個模擬IFoo)。

+0

+1是斯蒂爾的男人。 –

+0

爲了獲得100%的測試覆蓋率,我嘗試爲我的分支編寫單元測試,但它可能有點過分雄心勃勃 – magol

+0

如果您的工廠只是將創建委託給ninject(或其他一些ioc容器),那麼您確實不需要測試你的工廠,因爲實際上,你只是在測試你的容器。希望容器已經過測試! :) – PatrickSteele