Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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# 方法i';在ASP.net中使用Moq模拟和unittests进行m测试_C#_Asp.net_Unit Testing_Moq_Entity Framework 6 - Fatal编程技术网

C# 方法i';在ASP.net中使用Moq模拟和unittests进行m测试

C# 方法i';在ASP.net中使用Moq模拟和unittests进行m测试,c#,asp.net,unit-testing,moq,entity-framework-6,C#,Asp.net,Unit Testing,Moq,Entity Framework 6,好的,我很难形成一个好的qeustion,所以请不要因为我在代码中试图做的是一个列表而激怒我,我在列表中得到了一个对象。此对象由moqed数据库中的.find方法检索。但是,它不会返回值,因为在方法中,数据以某种方式显示,我的Person对象保留为null。我将发布一些屏幕截图,希望能够解释我试图说的内容以及我使用的测试方法: 方法: [TestMethod] public void TestDetails() { Person test

好的,我很难形成一个好的qeustion,所以请不要因为我在代码中试图做的是一个列表而激怒我,我在列表中得到了一个对象。此对象由moqed数据库中的.find方法检索。但是,它不会返回值,因为在方法中,数据以某种方式显示,我的Person对象保留为null。我将发布一些屏幕截图,希望能够解释我试图说的内容以及我使用的测试方法:

方法:

[TestMethod]
        public void TestDetails()
        {
            Person test = new Person();
            test.ID = 1;
            test.City = "Eindhoven Area, Netherlands.";
            test.Name = "Marijn van Donkelaar";
            test.LearntSkillsAndLevelOfSkills = "Java:7, C#:4, SQL:4, PLSQL:4, Software Documentation:4, Software Development:4, HTML:2, CSS:2, jQuery:1";
            test.ProfileImage = "/Images/hollemar.jpg";
            test.PhoneNr = "0612345678";
            test.SkillsToLearn = "ASP.net:2, JAVA:2";
            test.Email = "fraylight@gmail.com";
            Person test1 = new Person();
            test1.ID = 2;
            test1.City = "Eindhoven Area, Netherlands.";
            test1.Name = "Jan Pietjes";
            test1.LearntSkillsAndLevelOfSkills = "Java:7, C#:4, SQL:4, PLSQL:4, Software Documentation:4, Software Development:4, HTML:2, CSS:2, jQuery:1";
            test1.ProfileImage = "/Images/hollemar.jpg";
            test1.PhoneNr = "0612345678";
            test1.SkillsToLearn = "ASP.net:2, JAVA:2";
            test1.Email = "fraylight@gmail.com";
            Person test2 = new Person();
            test2.ID = 3;
            test2.City = "Eindhoven Area, Netherlands.";
            test2.Name = "Jasmine Test";
            test2.LearntSkillsAndLevelOfSkills = "Java:7, C#:4, SQL:4, PLSQL:4, Software Documentation:4, Software Development:4, HTML:2, CSS:2, jQuery:1";
            test2.ProfileImage = "/Images/hollemar.jpg";
            test2.PhoneNr = "0612345678";
            test2.SkillsToLearn = "ASP.net:2, JAVA:2";
            test2.Email = "fraylight@gmail.com";

            var data = new List<Person> { test, test1, test2 }.AsQueryable();

            var mockSet = new Mock<DbSet<Person>>();
            mockSet.As<IQueryable<Person>>().Setup(m => m.Provider).Returns(data.Provider);
            mockSet.As<IQueryable<Person>>().Setup(m => m.Expression).Returns(data.Expression);
            mockSet.As<IQueryable<Person>>().Setup(m => m.ElementType).Returns(data.ElementType);
            mockSet.As<IQueryable<Person>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator()); 

            var mockContext = new Mock<PersonDBContext>();

            mockContext.Setup(m => m.Persons).Returns(mockSet.Object);


            var service = new PersonController(mockContext.Object);

            ActionResult person = service.Details(1);


        }
[TestMethod]
public void TestDetails()
{
人员测试=新人员();
test.ID=1;
test.City=“荷兰埃因霍温地区”;
test.Name=“Marijn van Donkelaar”;
test.LearntSkillsAndLevelOfSkills=“Java:7,C#:4,SQL:4,PLSQL:4,软件文档:4,软件开发:4,HTML:2,CSS:2,jQuery:1”;
test.ProfileImage=“/Images/hollemar.jpg”;
test.PhoneNr=“0612345678”;
test.SkillsToLearn=“ASP.net:2,JAVA:2”;
test.Email=”fraylight@gmail.com";
Person test1=新的Person();
test1.ID=2;
test1.City=“荷兰埃因霍温地区。”;
test1.Name=“Jan Pietjes”;
test1.learntskills和levelofskills=“Java:7,C#:4,SQL:4,PLSQL:4,软件文档:4,软件开发:4,HTML:2,CSS:2,jQuery:1”;
test1.ProfileImage=“/Images/hollemar.jpg”;
test1.PhoneNr=“0612345678”;
test1.SkillsToLearn=“ASP.net:2,JAVA:2”;
test1.Email=”fraylight@gmail.com";
人员测试2=新人员();
test2.ID=3;
test2.City=“荷兰埃因霍温地区。”;
test2.Name=“茉莉花测试”;
test2.learntskills和levelofskills=“Java:7,C#:4,SQL:4,PLSQL:4,软件文档:4,软件开发:4,HTML:2,CSS:2,jQuery:1”;
test2.ProfileImage=“/Images/hollemar.jpg”;
test2.PhoneNr=“0612345678”;
test2.SkillsToLearn=“ASP.net:2,JAVA:2”;
test2.Email=”fraylight@gmail.com";
var data=newlist{test,test1,test2}.AsQueryable();
var mockSet=new Mock();
mockSet.As().Setup(m=>m.Provider).返回(data.Provider);
mockSet.As().Setup(m=>m.Expression).Returns(data.Expression);
mockSet.As().Setup(m=>m.ElementType).Returns(data.ElementType);
mockSet.As().Setup(m=>m.GetEnumerator()).Returns(data.GetEnumerator());
var mockContext=new Mock();
Setup(m=>m.Persons).Returns(mockSet.Object);
var service=newpersoncontroller(mockContext.Object);
ActionResult人员=服务详细信息(1);
}

有什么特别的原因吗?因为我真的没看到。我想这可能是因为moq数据只需要调用一次,然后就出现了,但我不知道。。。我确实检查了数据,看到给定的ID(1)被添加到了1个对象中,并且它在传递的列表中也是可见的

提前感谢,

Marijn

您正在模拟对象中使用一个
IEnumerator
。这意味着,当您的代码对其中的项进行枚举时,它位于
IEnumerator
的末尾,随后对枚举器的求值将产生0个结果(因为它位于末尾)

只要在每次调用
GetEnumerator
时返回一个新的
IEnumerator
,就可以解决此问题:

mockSet.As<IQueryable<Person>>().Setup(m => m.GetEnumerator())
    .Returns(() => data.GetEnumerator()); 
mockSet.As().Setup(m=>m.GetEnumerator())
.Returns(()=>data.GetEnumerator());
或者,重复使用相同的枚举数,但每次访问时都将其重置:

var enumerator = data.GetEnumerator();

mockSet.As<IQueryable<Person>>().Setup(m => m.GetEnumerator())
    .Returns(() =>
    {
        enumerator.Reset();
        return enumerator;
    });
var enumerator=data.GetEnumerator();
mockSet.As().Setup(m=>m.GetEnumerator())
.Returns(()=>
{
枚举数。重置();
返回枚举器;
});

您正在模拟对象中使用一个
IEnumerator
。这意味着,当您的代码对其中的项进行枚举时,它位于
IEnumerator
的末尾,随后对枚举器的求值将产生0个结果(因为它位于末尾)

只要在每次调用
GetEnumerator
时返回一个新的
IEnumerator
,就可以解决此问题:

mockSet.As<IQueryable<Person>>().Setup(m => m.GetEnumerator())
    .Returns(() => data.GetEnumerator()); 
mockSet.As().Setup(m=>m.GetEnumerator())
.Returns(()=>data.GetEnumerator());
或者,重复使用相同的枚举数,但每次访问时都将其重置:

var enumerator = data.GetEnumerator();

mockSet.As<IQueryable<Person>>().Setup(m => m.GetEnumerator())
    .Returns(() =>
    {
        enumerator.Reset();
        return enumerator;
    });
var enumerator=data.GetEnumerator();
mockSet.As().Setup(m=>m.GetEnumerator())
.Returns(()=>
{
枚举数。重置();
返回枚举器;
});

您正在模拟对象中使用一个
IEnumerator
。这意味着,当您的代码对其中的项进行枚举时,它位于
IEnumerator
的末尾,随后对枚举器的求值将产生0个结果(因为它位于末尾)

只要在每次调用
GetEnumerator
时返回一个新的
IEnumerator
,就可以解决此问题:

mockSet.As<IQueryable<Person>>().Setup(m => m.GetEnumerator())
    .Returns(() => data.GetEnumerator()); 
mockSet.As().Setup(m=>m.GetEnumerator())
.Returns(()=>data.GetEnumerator());
或者,重复使用相同的枚举数,但每次访问时都将其重置:

var enumerator = data.GetEnumerator();

mockSet.As<IQueryable<Person>>().Setup(m => m.GetEnumerator())
    .Returns(() =>
    {
        enumerator.Reset();
        return enumerator;
    });
var enumerator=data.GetEnumerator();
mockSet.As().Setup(m=>m.GetEnumerator())
.Returns(()=>
{
枚举数。重置();
返回枚举器;
});

您正在模拟对象中使用一个
IEnumerator
。这意味着,当您的代码对其中的项进行枚举时,它位于
IEnumerator
的末尾,随后对枚举器的求值将产生0个结果(因为它位于末尾)

您只需返回一个新的