2010-06-03 79 views
3

我在我的项目中编写了一些单元测试,并且在包含我想测试的方法的控制器上有一个datacontext依赖项。嘲笑具有依赖性的对象的数据上下文

我正在使用Ninject注入依赖项和Moq来创建我的模拟datacontext。我的DI使用了一个接口IDataContext,这是我的dbml使用并通过注入过程使用的接口。

在我的单元测试,我创造我的模拟的DataContext如下:

var mock = new Mock<IDataContext>(); 
var myController = new MyController(mock.Object); 

这将引发第二线Object reference not set to an instance of an object.例外,而执行datacontexts构造。

我明显错过了设置这个的一个基本部分,但大多数我见过的Moq例子涉及使用Setup()对嘲笑对象进行某种测试。

我对此有何看法?我应该创建一个模拟我的IDataContext界面或其他东西吗?

+0

您可以显示异常的调用堆栈? – 2010-06-03 17:23:55

+0

另外,MyController的构造函数中发生了什么? 如果我不得不冒险猜测在这一点上,你错过了模拟对象的设置,应该返回构造函数中使用的东西。 – cloggins 2010-06-03 19:12:59

+0

感谢您的评论家伙。我正准备在melaos发布我正在寻找的答案之前回复。再次感谢您抽出时间发表评论。 – 2010-06-04 12:48:51

回答

2

哈哈,当我通过emad's blog on unit testing in ASP.Net MVC.

我猜,你没有连接字符串添加到您的测试项目右边的app.config阅读 答案来了? :)

这就是数据库依赖的方式,因为你还没有嘲笑数据库端。 所以,如果你想这样做,你需要谷歌了一些代码,有几种方法可以做到这一点。

我发现下面这几个引用是非常有用的,但由于我真的没有必要模拟数据库端,我现在只是使用我的测试数据库服务器。

link

+0

感谢melaos!添加一个app.config到我的测试项目,并把我的连接字符串代码放在那里工作。优秀! – 2010-06-04 12:27:05

+0

很高兴帮助:) – melaos 2010-06-05 01:08:48