NUnit,我正在使用中介器,如何使用 NUnit 测试我的中介器处理程序

问题描述 投票:0回答:1

我正在尝试从我的 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,但效果不佳。 这里有人对如何实现这项工作有任何想法吗?

c# .net testing nunit mediator
1个回答
0
投票

如果您在项目中使用

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);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.