1

将我的脚趾浸入 asp.net 和 mvc,更具体地说是 MVC 5 的 web-api (2.0) 部分,我喜欢使用属性和创建自己的属性类来控制如何处理请求和为所有 api 返回响应的想法端-点。

如何测试”只有某些角色才能访问 MVC 中的控制器”一文描述了如何对单个控制器进行单元测试,以确保它保持正确的属性并且不会添加不需要的属性。

这是对单个控制器进行单元测试的一种完全有效的方法。但是,我更喜欢将 API 配置的所有测试放在一个地方,而不是分散在各个控制器的单元测试中。特别是,使用属性路由,控制器可以很容易地被另一个控制器替换,该控制器可能没有正确的属性并且其测试伙伴没有测试它们。

我的设想是一个单一的测试类,其中 API 配置的所有方面都可以防止(无意)更改的不良影响。我正在努力解决的是如何设置它。Bryan Avery 的文章(上面提到过)展示了如何获取控制器类的自定义属性列表,但是:

如何获得测试项目中存在的所有控制器的列表?

4

2 回答 2

3

反射应该在这里帮助你:

var myControllers = Assembly.Load(yourAssemblyName)
    .GetTypes()
    .Where(t => typeof(t).IsAssignableFrom(ApiController))
    .ToList();
于 2013-08-23T18:55:52.350 回答
1

这在 ASP.Net Core 中有效,基于Haney 的原始答案,但 Where 子句颠倒了。

var controllers = typeof(Startup)
.Assembly
.GetTypes()
.Where(t => typeof(Microsoft.AspNetCore.Mvc.Controller).IsAssignableFrom(t))
.ToList();
于 2021-03-15T19:23:14.083 回答