Mic*_*gan 2 c# unit-testing moq mocking stubbing
在 C# 中,如何模拟对象列表?
我正在尝试进行练习,它指定在单元测试的排列部分中我需要“模拟Book对象列表”。
创建 Book 对象的模拟列表的语法是什么?我尝试创建模拟 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);
}
Run Code Online (Sandbox Code Playgroud)
这给我带来了 2 个编译错误,都是 CS1503,在我尝试将模拟书籍添加到我的书籍类型列表的两行中。
只需创建一个书籍列表来表示在执行被测方法时要返回的假/模拟数据。无需使用起订量来获取虚假数据。使用 Moq 模拟ReadItemCommand被测系统 ( ) 的依赖关系 ( Catalogue)
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);
}
Run Code Online (Sandbox Code Playgroud)