为了测试控制器项目,我创建了一个 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);
}
我的测试未运行
您没有显示您的
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);
}
更多详情请参考官方文档