【问题标题】:Static Checking for Framework Conventions框架约定的静态检查
【发布时间】:2012-01-27 19:35:43
【问题描述】:

是否有产品/项目允许您定义约定,例如 MVC 项目,以静态检查命名约定,例如控制器是否附加在从控制器继承的类的末尾和/或在装饰时强制执行某个方法签名具有属性的方法。

我基本上是在寻找一种方法来为加入我们团队的新开发人员设置一些护栏,我们有一组明确的约定,其中一些用于通过反射动态连接事物。看到由于签名不兼容而导致反射连接失败,这对我们的加速过程来说是一个巨大的福音。

需要的主要功能:

  • 静态/编译时间检查违反规则
  • 能够定位带有特定属性的方法(通过 RegEx 或向导)
  • 基于不同项目类型的不同规则集。 (示例:MVC 应用的一组约定,Web 窗体应用的一组不同的约定,以及后缀为 .BLL 的类库的一组不同)

感谢您提供任何输入建议,尽管我要求您仅在您知道这些功能受支持的情况下才回复。

【问题讨论】:

  • 您尝试过 FxCop/代码分析吗?

标签: c# vb.net visual-studio visual-studio-2010 convention-over-configur


【解决方案1】:

这里的个人经验,但我总是为这样的事情编写测试。我解析我的程序集并确保事情遵循约定。对于几个具体示例,我检查了 WCF 请求/响应对象,以确保它们没有通过网络发送“DTO”并且它们都位于一致的 XML 命名空间中。

下面是一个快速示例,可确保所有服务方法都返回继承 BaseResponse 对象的内容:

[Test]
public void All_IMyService_methods_should_return_a_BaseResponse()
{
    var methods = typeof (IMyService).GetMethods();
    foreach (var methodInfo in methods)
        Assert.That(typeof (BaseResponse).IsAssignableFrom(methodInfo.ReturnType), "Service Method " + methodInfo.Name + " does not return a BaseResponse");
}

我确信有人会有更好/更自动化的东西,但这对我有用。

【讨论】:

  • 这是一个非常酷的方法,我会试一试,看看它是否能涵盖我本周末关心的用例。
  • 我喜欢它。它与您将获得的一样灵活。它仅受反射灵活性的限制。也就是说,你可能不会遇到无法测试的东西。
  • 感谢我能够通过反思涵盖我的所有案例!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
相关资源
最近更新 更多