无法实例化类的代理

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

为了测试控制器项目,我创建了一个 xUnit 类型的项目,并编写了一个函数并在函数之上设置了一个 Fact 属性

        [Fact]
        public void GetAllTest()
        {
            var mockMediator = new Mock<Mediator>();
            var controller = new ResidenceController(mockMediator.Object);
            var result = controller.GetAll();
            Assert.IsType<IEnumerable<ResidenceDto>>(result.Result);
            
        }

当我运行此测试时出现错误: 无法实例化类的代理:MediatR.Mediator。 找不到无参数构造函数。 (参数“构造函数参数”) ---- System.MissingMethodException:未找到类型“Castle.Proxies.MediatorProxy”的构造函数。


补充说明: 我的控制器继承自自定义 api 控制器,在方法中我使用 MediatR 并发送命令。

如何修复这个错误?

        [Fact]
        public void GetAllTest()
        {
            var mockMediator = new Mock<Mediator>();
            var controller = new ResidenceController(mockMediator.Object);
            var result = controller.GetAll();
            Assert.IsType<IEnumerable<ResidenceDto>>(result.Result);
            
        }

我的测试未运行

asp.net asp.net-web-api xunit xunit.net
1个回答
0
投票

您没有显示您的

ResidenceController
但我相信您的问题是因为您正在使用
Mediator
类的具体实现而不是
IMediator

ResidenceController

private IMediator mediator;
public ResidenceController(IMediator mediator)
{
    this.mediator = mediator
}

在 Program.cs 中:

services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<Startup>());

然后在你的测试中:

[Fact]
public void GetAllTest()
{
    var mockMediator = new Mock<IMediator>();
    var controller = new ResidenceController(mockMediator.Object);
    var result = controller.GetAll();
    Assert.IsType<IEnumerable<ResidenceDto>>(result.Result);
}

更多详情请参考官方文档

© www.soinside.com 2019 - 2024. All rights reserved.