Библиотеки моделирования играют очень важную роль в процессе разработки и тестирования программного обеспечения, особенно в Модульном свадьбасередина. Сегодня Dayao поделится с вами .NET Открытый исходный код、Популярность、Простота в использованиииз Библиотека моделирования:Moq
,Помогите упростить Модульное тестирование!
Moq — это популярная и простая в использовании библиотека моделирования .NET с открытым исходным кодом, которая в полной мере использует дерево выражений Linq .NET и лямбда-выражения. Это делает Moq самой продуктивной, типобезопасной и готовой к рефакторингу макетной библиотекой. Он поддерживает не только фиктивные интерфейсы, но и фиктивные классы. Его API очень прост и интуитивно понятен и не требует каких-либо предварительных знаний или опыта работы с концепциями моделирования. Это упрощает управление зависимостями и процесс проверки при модульном тестировании, а также улучшает тестируемость и удобство сопровождения кода.
Сначала мысоздавать Человек по имени:MoqExercise
.СЕТЬ 8 консольных приложений:
Ниже приведен простой пример, показывающий, как использовать Moq для быстрого создания макета объекта IUserInfo:
public interface IUserInfo
{
string UserName { get; set; }
int Age { get; set; }
string GetUserData();
}
public static void UserInfoTest()
{
// создавать IUserInfo изобъект симуляции
var mockUserInfo = new Mock<IUserInfo>();
// Установить значение атрибута объекта моделирования
mockUserInfo.SetupProperty(u => u.UserName, «Даяо»);
mockUserInfo.SetupProperty(u => u.Age, 27);
// настраивать GetUserData Метод возвращаемого значения
mockUserInfo.Setup(u => u.GetUserData()).Returns("UserName: Даяо, Age: 25");
// Получить экземпляр объекта моделирования
var userInfo = mockUserInfo.Object;
// Вызов метода и вывод результата
Console.WriteLine(userInfo.GetUserData());
Console.WriteLine("UserName: {0}, Age: {1}", userInfo.UserName, userInfo.Age);
}
При модульном тестировании также очень важно проверить вызывающие параметры метода. Платформа Moq предоставляет метод Verify, который помогает разработчикам легко проверять эти аспекты.
public interface IVerifyService
{
void Process(int value);
}
public class VerifyServiceClient
{
private readonly IVerifyService _service;
public VerifyServiceClient(IVerifyService service)
{
_service = service;
}
public void Execute(int[] values)
{
foreach (var value in values)
{
_service.Process(value);
}
}
}
public static void VerifyTest()
{
// Создать макет объекта
var serviceMock = new Mock<IVerifyService>();
// Создайте тестовый объект и внедрите макет объекта.
var serviceClient = new VerifyServiceClient(serviceMock.Object);
// Выполнять
serviceClient.Execute([1, 2, 3]);
// Проверьте время и параметры вызова метода
serviceMock.Verify(x => x.Process(1));
serviceMock.Verify(x => x.Process(3));
serviceMock.Verify(x => x.Process(2));
//serviceMock.Verify(x => x.Process(12)); //Здесь будет выведено аномальное сообщение, указывающее на то, что проверка не удалась.
// Если при запуске здесь не выдается аномальный запрос, значит проверка пройдена.
Console.WriteLine("Верификация пройдена!");
}
При использовании платформы Moq в модульном тестировании вы можете имитировать методы интерфейса, которые вызывают исключения.
public static void TestThrowException()
{
// создавать IUserInfo изобъект симуляции
var mockUserInfo = new Mock<IUserInfo>();
// настраивать GetUserData Метод выдает аномальный результат при вызове
mockUserInfo.Setup(x => x.GetUserData()).Throws(new Exception("моделированиеизаномальный")); // Получить экземпляр объекта моделирования
var userInfo = mockUserInfo.Object.GetUserData();
}
Чтобы узнать больше о практических функциях и особенностях проекта, посетите адрес проекта с открытым исходным кодом👀 и не забудьте дать проекту звездную поддержку💖.