C#
В файле Program.cs напишем код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Moq;
namespace ConsoleApplication1
{
public class Book
{
public string Name;
public int Price;
}
public interface IRepository
{
int GetCount();
Book GetBook(int index);
void Add(Book book);
}
class Program
{
static void Main(string[] args)
{
Book[] books = {
new Book(){Name="a", Price=100},
new Book(){Name="d", Price=320},
new Book(){Name="e", Price=56},
};
// Шаг1. Создаем mock объект (указывающий на IRepository)
Mock<IRepository> mock = new Mock<IRepository>();
// Шаг2. Добавляем в mock объект метод GetBook
// взависимости от переметра в GetBook настраиваем что метод GetBook будет возращать
// Говорим mock объекту, что при вызыве rep.GetBook(1) будет возращен books[0]
mock.Setup(r => r.GetBook(1)).Returns(books[0]);
// Говорим mock объекту, что при вызыве rep.GetBook(2, 3 или больше) будет возращен books[2]
mock.Setup(r => r.GetBook(It.Is<int>(v => v > 1))).Returns(books[2]);
// Шаг3. Тестируем mock объект
IRepository rep = mock.Object;
Book b0 = rep.GetBook(0); // null
Book b1 = rep.GetBook(1); // books[0]
Book b2 = rep.GetBook(2); // books[2]
Book b3 = rep.GetBook(3); // books[2]
Book b4 = rep.GetBook(4); // books[2]
Book b5 = rep.GetBook(5); // books[2]
}
}
}