设置Moq对象问题

时间:2009-09-06 04:01:17

标签: c# moq

我正在使用构造函数注入模式来插入带有moq的模拟。

所以我在我的nunit测试中有这样的东西

property UserMock 
property IService // interface

public void PreSetup()
{
   UserMock = new UserMock;
   ITaskService = new Service(UserMock.object);

}

现在我有一个像这样的单元测试方法

public void TestSomething()
{
   UserMock.Setup(u => u.SomeMethod(It.IsAny<string>()));
}

现在我以为我总是必须这样做。

  public void TestSomething()
    {
       UserMock.Setup(u => u.SomeMethod(It.IsAny<string>()));
       ITaskService.User = UserMock.Object
    }

似乎我不必这样做。就像我的想法一样,对象被传递到构造函数中,其中的内容被设置到TaskServiceClass中的“User”属性中。

因此,如果我稍后来到某个方法并添加一些内容,除非我重置该对象,否则它不会被设置。

似乎并非如此。那么我不理解的是什么?

由于

1 个答案:

答案 0 :(得分:1)

这是所有猜测:但UserMock.Object.SomeMethod可能在其父级调用自定义方法,如在UserMock.SomeMethod中。至少在UserMock.Object上更改SomeMethod的定义而不创建新对象。

因此,将UserMock.Object传递给构造函数工作正常,因为如果我是对的,ITaskService会保存对UserMock.Object的引用,该引用包含对UserMock的引用,可以自由更改其对SomeMethod的处理而不会丢失连接已在PreSetup中建立。