c# - 如何在测试中创建一个真正的 MediatR 实例?
问题描述
我想编写一个集成测试,但我不知道如何制作一个 Mediator 实例。我看到了使用 AutoFac 的示例,但我质疑自己如何去做。
也许这不是要走的路,但无论如何这是我想要的。随时提供反馈。
所以我的控制器中有一个构造函数,如下所示:
FooController(IMediator mediator){
}
我的测试是这样的:
FooControllerTest(){
var mediator = ____ //this I don't get
var controller = new FooController(mediator);
//do testing stuff here
}
我试图像这样创建调解器:
var mediator = new Mediator(new ServiceFactory());
但是 ServiceFactory 需要一个 System.Type 对象。我试图像这样制作这种类型的测试实例:
class TypeTestInstance : Type {}
然后是测试:
FooControllerTest(){
var mediator = new Mediator(new ServiceFactory(new TypeTestInstance()));
}
但在这个例子中,它给出了一个错误的方法名称,Stackoverflow 说我需要这样做:new ServiceFactory(() => new TypeTestInstance());
但这不起作用。它说 Delegate ServiceFactory 不接受 0 个参数。但是在这个例子中,我什至不确定它是否有效。
所以我想听听你是怎么解决这个问题的。。
解决方案
我不确定您是否使用 .NET Core 的 API,但这个答案可能有助于 通过 MediatR PipelineBehavior 进行单元测试验证。
使用 testserver 访问 HTTP 端点还可以测试任何被调用的 mediatr 处理程序,您可以断言任何使您的测试合理的事情(db 是否存储了一个值,是响应状态 x,响应是否包含 x 等)
推荐阅读
- virtual-machine - 无法从 WSL2 Ubuntu ping Ubuntu VM
- android - 保存并恢复后滚动位置只是稍微关闭
- flutter - 从原生控制器返回 Flutter 应用
- primefaces - 如何用空格更改 LineChartSeries 的数字分隔符?
- java - E/MediaPlayer:使用模拟器时出错 (1,-2147483648)
- javascript - Javascript 对象属性值
- r - 在 R 中,如何根据另一个单元格的值删除一系列单元格?
- ios - 固定大小 short[] 数组的动态列表
- delphi - E2001 需要序号类型
- php - 如何让这个 PHP 循环在 Blade 中工作?