2011-10-05 104 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