C# 自动测试方法参数和引发.net/VS异常的工具?

C# 自动测试方法参数和引发.net/VS异常的工具?,c#,.net,visual-studio,exception,annotations,C#,.net,Visual Studio,Exception,Annotations,当我编写代码时,我有一个奇怪的习惯,就是在方法开始时使用这样抛出异常的代码 public WhateverType MethodName(CrazyObjectType crazyObject, string para2){ if(crazyObject == null){ throw new ArgumentNullException("crazyObject"); } if(param2 == null){ throw new Argu

当我编写代码时,我有一个奇怪的习惯,就是在方法开始时使用这样抛出异常的代码

public WhateverType MethodName(CrazyObjectType crazyObject, string para2){
    if(crazyObject == null){
        throw new ArgumentNullException("crazyObject");
    }
    if(param2 == null){
        throw new ArgumentNullException("param2");
    }
    if(para2.Lenght > 32){
        throw new ArgumentOutOfBoundsException("para2");
    }

    ...
}
假设有些方法有6个参数,其中非参数允许为null,有些是字符串,可能不是空的,也可能不是比某个值长的字符串。您可以想象,在我开始实际的方法逻辑之前,我编写了相当多的代码+我的类将更难阅读

有没有什么工具/VS插件/Resharper插件/注释/代码片段可以让我不用写这些重复的代码

理想的解决方案是一些声明性注释,如:

[NotNull("crazyObject, param2")] [StringLenght("para2", 0, 32)]
public WhateverType MethodName(CrazyObjectType crazyObject, string para2){
    ...
}
  • 一些VS/Resharper插件,允许折射这样的参数,所以当我重命名/折射一些参数注释将自动同步
我的理想图像更进一步,我想象我可以用GUI来自动化这个过程,这样我就可以选择方法单击某个地方,选中一些不应该为null的参数复选框,然后为我生成注释

这样的东西存在吗


注意:我想我总是可以创建代码狙击手来生成代码,但是声明式方法和GUI生成器会更好


编辑:说“考虑一些方法有6个参数”只是一个例子——我想我没有很多这样的方法。相反,我应该写“假设你有很多抛出3-4个
ArgumentException
s的方法”


EDIT2:糟糕的术语。我意识到,在这个问题中,我称之为“注释”的内容和我的注释在.NET中应该被称为“属性”,如果我从.NET类中正确地记住了它。

虽然它不是严格的声明性内容,但我想您可能应该看看

对于一种让空参数测试更便宜的奇怪且不被推荐的方法,请看一看。但这只包括空参数检查,而不包括其他类型的有效性


顺便说一下,方法的第一部分只是执行参数验证,这并不奇怪。这是完全合理的。

虽然它不是严格的声明性的,但我认为您可能应该看看

对于一种让空参数测试更便宜的奇怪且不被推荐的方法,请看一看。但这只包括空参数检查,而不包括其他类型的有效性


顺便说一下,方法的第一部分只是执行参数验证,这并不奇怪。这是完全合理的。

我同意Jon关于使用代码契约的看法。您可能会发现另一件有趣的事情。

我同意Jon关于使用代码契约的看法。你可能会发现另一件有趣的事。

@Jon Skeet顺便说一句。那个“奇怪”只是我尽量避免同一个人建议我不要这样做,因为这个或那个。。。我希望有更多的工具用于此。。。包括那些图形化的。例如,EclipseIDEforJava有这样的内置代码。你可能错过了一些解决方案吗?@drasto:我不明白你为什么特别想要一个图形工具。毕竟,你是在试图操纵文本文件。我怀疑ReSharper可能有一些这样的代码段,但看起来您所追求的是一种完全不同的方法,而不是源代码段-我看不出IDE如何帮助您做到这一点。@Jon Skeet,因为如果有注释,我认为GUI将是创建它们的最快方法。您可以使用代码段来创建注释,但必须编写参数名称。。。我喜欢长的。选中复选框会更快。@drasto:如果注释的形式是参数名前面的
[NotNull]
,我想我宁愿键入它(可能在
[No
后面使用Intellisense)而不是把手从键盘移到鼠标上,等等。@drasto:创建属性很容易。让它做任何事情都相当困难…基本上你需要某种AOP框架。你可以查看PostSharp,它可能很好地支持这一点。@Jon Skeet补充说一句。-这“奇怪”这只是我最好的尝试,避免同一个人建议我不要这样做,因为这样或那样…我希望有更多的工具用于此…包括那些图形化的。例如,Eclipse IDE for Java有类似的内置功能。您可能错过了一些解决方案吗?@drasto:我不明白为什么您也会特别想要图形化的l、 毕竟,您正在尝试操作文本文件。我怀疑ReSharper可能有一些类似的代码段,但看起来您使用的是一种完全不同的方法,而不是源代码段-我看不出IDE如何帮助您做到这一点。@Jon Skeet,因为如果有注释,我认为GUI将是最快的实现方法确实要创建它们。你可以用代码段来创建注释,但是你必须写参数的名称……我喜欢它们很长。选中复选框会更快。@drasto:如果注释的形式是参数名称之前的
[NotNull]
,我想我宁愿键入它(并在
之后使用Intellisense)[可能没有
)而不是把手从键盘移到鼠标上,等等。@drasto:创建属性很容易。让它做任何事情都相当困难…基本上你需要某种AOP框架。你可以看看PostSharp,它可能很支持这一点。我想我仍然需要带折射支持的注释。我想我仍然需要带折射的注释h折射支持。你说得对,它们在.NET中被称为属性……但用“通用”的方式调用它们注释是可以的,我想:)你说得对,它们在.NET中被称为属性……但用“通用”的方式调用它们注释是可以的,我想:)