Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 最低起订量模拟值<;Obj>;vs新Obj();_C#_Nunit_Tdd_Moq - Fatal编程技术网

C# 最低起订量模拟值<;Obj>;vs新Obj();

C# 最低起订量模拟值<;Obj>;vs新Obj();,c#,nunit,tdd,moq,C#,Nunit,Tdd,Moq,最近我做了很多单元测试,我从Moq库中发现了Mock.of方法。阅读之后,我最终发现,Mock.Of是创建模拟接口实例的一个很好的选择,但是我可以通过new关键字自己创建对象的常规类呢?一些Nunit教程使用这种方法,这让我感到困惑,因为我觉得它在任何方面都没有用处 Person newPerson = new Person() { Name = "David", Surname = "Smith" }; Person mockedPerson = Mock.Of<Pers

最近我做了很多单元测试,我从
Moq
库中发现了
Mock.of
方法。阅读之后,我最终发现,
Mock.Of
是创建模拟接口实例的一个很好的选择,但是我可以通过
new
关键字自己创建对象的常规类呢?一些
Nunit
教程使用这种方法,这让我感到困惑,因为我觉得它在任何方面都没有用处

    Person newPerson = new Person() { Name = "David", Surname = "Smith" };
    Person mockedPerson = Mock.Of<Person>(o => o.Name == "David" && o.Surname == "Smith");
Person newPerson=newPerson(){Name=“David”,姓氏=“Smith”};
mockedPerson=Mock.Of(o=>o.Name==“大卫”和&o.Name==“史密斯”);

这两个物体之间有什么区别吗?在这种情况下,
Mock.Of
是否有任何优势,或者我是否应该使用常规的
new
关键字来创建类的新实例?

我认为您显示的代码完全忽略了模拟的意义。 模拟应该在接口和抽象类上工作,所以您不必创建实际的对象。或者创建对象的模拟

因此,您可以执行
Mock.Of
,然后分配测试中所需的一些值,但您不需要做的是首先创建对象并设置它,然后创建它的Mock

假设您有如下代码:

public interface IPerson
{
     some method and property signatures
}
那你有

public class Person : IPerson
{ 
    some code here
}
现在假设您有一个以IPerson为参数的方法

然后,您可以执行以下操作:

var mockedPerson = Mock.Of<IPerson>();
mockedPerson.Age = 27;

int age = GetAge(mockedPerson);
Assert.AreEqual(age, 27)
var mockedPerson=Mock.Of();
模拟人。年龄=27岁;
int age=GetAge(mockedPerson);
A.男女平等(年龄27岁)

创建实际对象的模拟对我来说毫无意义。

我认为您显示的代码完全没有理解模拟的意义。 模拟应该在接口和抽象类上工作,所以您不必创建实际的对象。或者创建对象的模拟

因此,您可以执行
Mock.Of
,然后分配测试中所需的一些值,但您不需要做的是首先创建对象并设置它,然后创建它的Mock

假设您有如下代码:

public interface IPerson
{
     some method and property signatures
}
那你有

public class Person : IPerson
{ 
    some code here
}
现在假设您有一个以IPerson为参数的方法

然后,您可以执行以下操作:

var mockedPerson = Mock.Of<IPerson>();
mockedPerson.Age = 27;

int age = GetAge(mockedPerson);
Assert.AreEqual(age, 27)
var mockedPerson=Mock.Of();
模拟人。年龄=27岁;
int age=GetAge(mockedPerson);
A.男女平等(年龄27岁)

对我来说,创建实际对象的模拟对象毫无意义。

是的,我完全同意你的看法。这就是为什么当我在一些教程中看到这种方法时,我会感到非常困惑,这也是我带着这个问题来到这里的原因。遗憾的是,我已经失去了资料来源,所以我无法指向那些教程。是的,我完全同意你的看法。这就是为什么当我在一些教程中看到这种方法时,我会感到非常困惑,这也是我带着这个问题来到这里的原因。遗憾的是,我已经丢失了源代码,所以我无法指向那些教程