我有一個工廠,看起來像如下:起訂量與構造函數參數
public IFoo GetFoo(IFile file)
{
return _kernel.Get<IFoo>(new ConstructorArgument("file", file));
}
它,直到我用的起訂量正常工作嘲笑IFoo
。在模擬中沒有名爲file的構造函數參數,並且我得到一個Ninject.ActivationException。
我應該如何解決這個問題?
我有一個工廠,看起來像如下:起訂量與構造函數參數
public IFoo GetFoo(IFile file)
{
return _kernel.Get<IFoo>(new ConstructorArgument("file", file));
}
它,直到我用的起訂量正常工作嘲笑IFoo
。在模擬中沒有名爲file的構造函數參數,並且我得到一個Ninject.ActivationException。
我應該如何解決這個問題?
你應該在測試過程中嘲笑你的工廠。希望「GetFoo」方法是您的工廠界面的一部分。嘲笑工廠,然後你可以建立工廠來返回你想要的任何IFoo(一個測試IFoo或者一個模擬IFoo)。
+1是斯蒂爾的男人。 –
爲了獲得100%的測試覆蓋率,我嘗試爲我的分支編寫單元測試,但它可能有點過分雄心勃勃 – magol
如果您的工廠只是將創建委託給ninject(或其他一些ioc容器),那麼您確實不需要測試你的工廠,因爲實際上,你只是在測試你的容器。希望容器已經過測試! :) – PatrickSteele
有些東西有異味,你不需要在單元測試中使用你的IoC容器。 – BFree
同意@BFree。在工廠內使用Ninject內核也有點味道。請參閱http://stackoverflow.com/questions/6277771/what-is-a-composition-root-in-the-context-of-dependency-injection – TrueWill
爲什麼當你想模擬一個接口時你想傳遞一個參數? –