首页 新闻 会员 周边

.net core 用了autofac怎么做controler单元测试

0
悬赏园豆:20 [已解决问题] 解决于 2019-10-17 11:35

如题,做控制器单元测试,已经设置了把controller当做服务,services.AddMvc().AddControllersAsServices(),用了autofac替代了默认注入方式,做单元测试时不能像以下这种方式获取controller了
[SetUp]
public void Init()
{
var server = new TestServer(WebHost.CreateDefaultBuilder().UseStartup<Startup>());

     _deviceTest = server.Host.Services.GetService<DeviceTestController>();

}

请教各位大神用了autofac后,做单元测试时怎样获取控制器的注入对象

尛鱻鱻的主页 尛鱻鱻 | 初学一级 | 园豆:186
提问于:2019-10-11 17:09
< >
分享
最佳答案
0

你要拿到Controller对象本身就是错误的。
如果是要对Controller测试,请使用 TestServer.CreateClient().......

收获园豆:20
czd890 | 专家六级 |园豆:14412 | 2019-10-11 17:11

通过.AddControllersAsServices()可以把controller当做一个service,然后按上面问题中提到的那样拿到controller的注入对象,但是改成autofac后不知道怎么获取了,也是要看下覆盖率,TestServer.CreateClient()跟直接用postman没多大区别了,没办法看到action的覆盖率

尛鱻鱻 | 园豆:186 (初学一级) | 2019-10-11 17:47
其他回答(1)
0

感谢czd890的回答,问题解决了,原因是自己写autofac批量注入时不小心把接口程序集放到注入的语法中了,导致“None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'”错误,改了之后问题中所提方式依然可以

尛鱻鱻 | 园豆:186 (初学一级) | 2019-10-17 11:34

请教下如果controller是独立的project程序集(类库)
//程序集
var moduleAssembly = Assembly.LoadFrom(controllerPath);
//注册controllers
builder.RegisterAssemblyTypes(moduleAssembly)
.Where(t => typeof(ControllerBase).IsAssignableFrom(t) && t != typeof(ControllerBase))
.PropertiesAutowired();//允许属性注入
为了解耦不作引用程序集,这样无效。swagger也无法生成webapi接口,请问有没有解决办法?多谢

支持(0) 反对(0) dhatom | 园豆:200 (初学一级) | 2021-02-20 08:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册