C# 设置Moq对象问题

C# 设置Moq对象问题,c#,moq,C#,Moq,我使用构造函数注入模式插入moq的mock 所以我的nunit测试中有类似的东西 property UserMock property IService // interface public void PreSetup() { UserMock = new UserMock; ITaskService = new Service(UserMock.object); } 现在我有了这样的单元测试方法 public void TestSomething() { UserM

我使用构造函数注入模式插入moq的mock

所以我的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());
}
现在我想我以后总要这么做

  public void TestSomething()
    {
       UserMock.Setup(u => u.SomeMethod(It.IsAny<string>()));
       ITaskService.User = UserMock.Object
    }
public void TestSomething()
{
UserMock.Setup(u=>u.SomeMethod(It.IsAny());
ITaskService.User=UserMock.Object
}
看来我没必要这么做。就像我的想法一样,对象被传递到构造函数中,其中的内容被设置到TaskServiceClass中的“User”属性中

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

事实似乎并非如此。那么我还不明白什么呢


谢谢

这都是推测:但是UserMock.Object.SomeMethod可能会调用其父对象上的自定义方法,就像在UserMock.SomeMethod中一样。至少在UserMock.Object上更改了SomeMethod的定义,而不创建新对象


因此,将UserMock.Object传递给构造函数可以很好地工作,因为如果我是对的,ITaskService持有对UserMock.Object的引用,而UserMock.Object持有对UserMock的引用,它可以自由地更改对某个方法的处理,而不会丢失您在PreSetup中建立的连接。

啊,这有点道理,完全忘记了当您创建对象时,会产生一个引用,并且可以有不同的对象指向它。我从未以这种方式实际使用过Mock,所以我没有花一分钟去考虑它。通常,我会在每个测试方法中创建一个新的模拟和服务,但这是出于习惯和需要在每个测试的基础上保持灵活性。