Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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#如何模拟对象列表_C#_Unit Testing_Mocking_Moq_Stubbing - Fatal编程技术网

c#如何模拟对象列表

c#如何模拟对象列表,c#,unit-testing,mocking,moq,stubbing,C#,Unit Testing,Mocking,Moq,Stubbing,在C#中,如何模拟对象列表 我正在尝试一个练习,它在单元测试的arrange部分指定我需要“模拟Book对象的列表” 创建书本对象模拟列表的语法是什么?我尝试过创建模拟书对象,并将它们添加到书籍列表中,但没有成功 public void Test_GetAllBooks_ReturnsListOfBooksItReceivesFromReadAllMethodOfReadItemCommand_WhenCalled() { //Arrange Mock<ReadItemCo

在C#中,如何模拟对象列表

我正在尝试一个练习,它在单元测试的arrange部分指定我需要“模拟
Book
对象的列表”

创建书本对象模拟列表的语法是什么?我尝试过创建模拟书对象,并将它们添加到书籍列表中,但没有成功

public void Test_GetAllBooks_ReturnsListOfBooksItReceivesFromReadAllMethodOfReadItemCommand_WhenCalled()
{
    //Arrange
    Mock<ReadItemCommand> mockReadItemCommand = new Mock<ReadItemCommand>();
    Catalogue catalogue = new Catalogue(mockReadItemCommand.Object);

    Mock<Book> mockBook1 = new Mock<Book>();
    Mock<Book> mockBook2 = new Mock<Book>();
    List<Book> mockBookList = new List<Book>();
    mockBookList.Add(mockBook1);
    mockBookList.Add(mockBook2);

    mockReadItemCommand.Setup(r => r.ReadAll()).Returns(mockBookList);

    //Act
    List<Book> actual = catalogue.GetAllBooks();

    //Assert
    Assert.AreSame(mockBookList, actual);

}
public void Test\u getallbook\u从REDITEM命令的READALL方法返回SLITERECIES到FBOOKSITERCES\u when called()
{
//安排
Mock mockReadItemCommand=new Mock();
目录目录=新目录(mockReadItemCommand.Object);
Mock mockBook1=新Mock();
Mock mockBook2=新Mock();
List mockBookList=新列表();
mockBookList.Add(mockBook1);
mockBookList.Add(mockBook2);
mockReadItemCommand.Setup(r=>r.ReadAll()).Returns(mockBookList);
//表演
列表实际值=catalog.GetAllBooks();
//断言
Assert.AreName(模拟书列表,实际);
}

这给了我两个编译错误,都是CS1503,在我试图将模拟书添加到我的类型书列表的两行上。

如果我没有弄错,您可以克隆列表: 例如,如下所示:

您可以用同样的方法克隆它,或者您可以通过创建一个新列表并从源列表中添加每个元素的副本来复制列表。
希望能有所帮助。

如果我没弄错,您可以克隆列表: 例如,如下所示:

您可以用同样的方法克隆它,或者您可以通过创建一个新列表并从源列表中添加每个元素的副本来复制列表。
希望能有所帮助。

只需创建一个图书列表,以表示在执行测试方法时要返回的伪造/模拟数据。对于虚假数据,无需使用最低起订量。使用Moq模拟被测系统(
catalog
)的依赖项(
ReadItemCommand

public void Test\u getallbook\u从REDITEM命令的READALL方法返回SLITERECIES到FBOOKSITERCES\u when called()
{
//安排
var mockReadItemCommand=new Mock();
var目录=新目录(mockReadItemCommand.Object);
var预期值=新列表(){
新书{
Title=“Book1”,
//填充其他属性
},
新书{
Title=“Book2”,
//填充其他属性
}
};
mockReadItemCommand
.Setup(=>\u0.ReadAll())
.回报(预期);
//表演
var实际值=catalog.GetAllBooks();
//断言
Assert.AreName(预期、实际);
}

只需创建一个书籍列表,以表示在执行测试方法时要返回的伪造/模拟数据。对于虚假数据,无需使用最低起订量。使用Moq模拟被测系统(
catalog
)的依赖项(
ReadItemCommand

public void Test\u getallbook\u从REDITEM命令的READALL方法返回SLITERECIES到FBOOKSITERCES\u when called()
{
//安排
var mockReadItemCommand=new Mock();
var目录=新目录(mockReadItemCommand.Object);
var预期值=新列表(){
新书{
Title=“Book1”,
//填充其他属性
},
新书{
Title=“Book2”,
//填充其他属性
}
};
mockReadItemCommand
.Setup(=>\u0.ReadAll())
.回报(预期);
//表演
var实际值=catalog.GetAllBooks();
//断言
Assert.AreName(预期、实际);
}

展示您迄今为止在一个应用程序中所做的尝试。也许到那时,可以提供更好的帮助。这个练习中的所有内容都可以在这个网站上找到,因为它已经被问过了。我投票将这个问题作为离题题来结束,因为家庭作业问题必须显示出你迄今为止所做的努力,并具体说明你的困境。如前所述,这只是“给我一个codez”。好吧,对不起,伙计们,我对软件开发(因此这个问题)是新手,对StackOverflow也是新手——没有必要对我的问题做出这样的反应。我认为很明显,我的问题是关于如何模拟对象列表的。现在请查看我上面的代码。显示到目前为止您在一个应用程序中尝试了什么。也许到那时,可以提供更好的帮助。这个练习中的所有内容都可以在这个网站上找到,因为它已经被问过了。我投票将这个问题作为离题题来结束,因为家庭作业问题必须显示出你迄今为止所做的努力,并具体说明你的困境。如前所述,这只是“给我一个codez”。好吧,对不起,伙计们,我对软件开发(因此这个问题)是新手,对StackOverflow也是新手——没有必要对我的问题做出这样的反应。我认为很明显,我的问题是关于如何模拟对象列表的。现在请看我上面的代码。嗨,郊狼。谢谢你的建议。我是C#的新手,请容忍我。克隆与使用Moq模拟相同吗?使用mock可以实现同样的效果吗?我被特别要求在这个练习中使用最小起订量。嗨,郊狼。谢谢你的建议。我是C#的新手,请容忍我。克隆与使用Moq模拟相同吗?使用mock可以实现同样的效果吗?我被特别要求在这个练习中使用最小起订量。谢谢你的解决方案。这就解决了编译错误的问题。但是,本练习指定了“您需要模拟书本对象列表”和“您需要存根mock ReadItemCommand的ReadAll()方法以返回模拟书本列表”。所以我不需要一个模拟书籍的列表或者一个实际书籍对象的模拟列表吗?我被告知,只有被测试的对象才应该是真实的,测试中使用的所有其他对象都应该是模拟的。[很抱歉,如果这些都是愚蠢的问题,我发现模仿非常令人困惑!]@MichaelHennigan书单充当模拟数据源。它们不是实时持久化数据中的实际数据。因此,他们是嘲笑者。实际的模拟是依赖项,书籍列表是模拟功能的一部分。Th
public void Test_GetAllBooks_ReturnsListOfBooksItReceivesFromReadAllMethodOfReadItemCommand_WhenCalled()
{
    //Arrange
    var mockReadItemCommand = new Mock<ReadItemCommand>();
    var catalogue = new Catalogue(mockReadItemCommand.Object);

    var expected = new List<Book>(){
        new Book {
            Title = "Book1", 
            //populate other properties  
        },
        new Book { 
            Title = "Book2", 
            //populate other properties  
        }
    };

    mockReadItemCommand
        .Setup(_ => _.ReadAll())
        .Returns(expected);

    //Act
    var actual = catalogue.GetAllBooks();

    //Assert
    Assert.AreSame(expected, actual);
}