我正在尝试从我的 api 测试由中介调用的处理程序,但它似乎无法在测试用例中调用。我不想嘲笑中介者或处理程序,只是嘲笑存储库。
这是我的测试代码:
using NUnit.Framework;
using Domain.Model;
using Core.Handlers.TimerRegister;
using System.Security.Cryptography.X509Certificates;
using Moq;
using Repository.IRepository;
using System;
using MediatR;
namespace EmployeeRegisterTest.CoreTest
{
[TestFixture]
public class TimerRegisterTest
{
private Mock<IEmployeeRepository> employeeRepositoryMock = new Mock<IEmployeeRepository>();
private Mock<IEmployeeTimeRegister> timerRegisterRepositoryMock = new Mock<IEmployeeTimeRegister>();
private TimerRegisterCommandHandler TimerRegisterCommandHandler;
private IMediator mediator;
[Test]
public async Task MustRegisterTimeCorrecttly()
{
var employee = new Employee
{
Email = "[email protected]",
EmployeeName = "Jorge",
Password = "$2a$11$p0655c8x/QoQAjnor0vT8eoK6OagnT1g34b/YN9NkPOtsvlFf828G",
Role = "mananger",
Id = 2
};
var timeRegister = new TimeRegister
{
Employee = employee,
Id = 1,
EmployeeTimeRegister = DateTime.Now
};
var timerRegistarList = new List<TimeRegister>();
timerRegistarList.Add(timeRegister);
var timeRegisterCommandRequest = new TimeRegisterCommandRequest
{
EmployeeEmail = employee.Email,
EmployeeName = employee.EmployeeName,
};
employeeRepositoryMock.Setup( x => x.GetEmployee("[email protected]"))
.Returns(Task.FromResult(employee));
timerRegisterRepositoryMock.Setup(x => x.GetTodayTimeRegisterByEmployeeAndDate(employee, DateTime.Now))
.Returns(Task.FromResult(timerRegistarList));
var returns = await mediator.Send(timeRegisterCommandRequest);
Assert.Equals(returns.message, "Register created successfuly");
}
}
}
我尝试使用metiator,但没有成功。我尝试使用 costroctor,但效果不佳。 这里有人对如何实现这项工作有任何想法吗?
如果您在项目中使用
Microsoft.Dependency.Injection
进行 DI,那么您可以这样做:
var services = new ServiceCollection();
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(assembliesForMediar));
//Add the rest of your dependencies
services.AddScoped<IEmployeeRepository>(sp => employeeRepositoryMock.Object);
services.AddScoped<IEmployeeTimeRegister>(sp => timerRegisterRepositoryMock.Object);
var provider = services.BuildServiceProvider();
var mediator = provider.GetServices<IMediator>();
var returns = await mediator.Send(timeRegisterCommandRequest);