自动测试属性getter/setter

Chr*_*s S 4 c# unit-testing properties

我们对域对象的许多属性使用支持字段,例如:

protected string _firstname;

public virtual string Firstname
{
    get { return _firstname; }
    set { _firstname = value; }
}
Run Code Online (Sandbox Code Playgroud)

我偶尔会像下面的例子那样制作愚蠢的拼写错误,并希望编写一个验证所有这些属性的测试,而不是手动对每个对象进行测试.

public virtual string Firstname
{
    get { return _firstname; }
    set { _firstname = Firstname; }
}
Run Code Online (Sandbox Code Playgroud)

是否容易编写或者是否已经存在库以测试这些支持字段是否正确获取/设置?这只会在具有setter的属性上运行,并且(可能)是使用camel-case下划线匹配属性名称的后备字段

alu*_*lun 5

另一种解决方案是使用自动属性来消除此问题:

public virtual string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)

更新(见评论,支持领域似乎需要):另一种可能性是生成pocos.简单的t4模板'Person.tt'

<#@ template language="C#" #>
<# var pocos = new [] {
    Tuple.Create("FirstName", "string"), 
    Tuple.Create("LastName", "string"), 
    Tuple.Create("Age", "int")}; #>
public partial class Person {
    <# foreach(var t in pocos) {#>

    protected <#= t.Item2#> _<#= t.Item1.ToLowerInvariant()#>;
    public virtual <#= t.Item2#> <#= t.Item1#>
    {
        get { return _<#= t.Item1.ToLowerInvariant()#>; }
        set { _<#= t.Item1.ToLowerInvariant()#> = value; }
    }
    <#}#>
}
Run Code Online (Sandbox Code Playgroud)

现在这当然可以带来它解决的许多问题,但它可能值得一看...也许:)