C# 设置Moq对象问题
我使用构造函数注入模式插入moq的mock 所以我的nunit测试中有类似的东西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
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,所以我没有花一分钟去考虑它。通常,我会在每个测试方法中创建一个新的模拟和服务,但这是出于习惯和需要在每个测试的基础上保持灵活性。