如何为包含只读成员的接口创建单元测试存根?

Rob*_*vey 5 c# unit-testing properties interface readonly

我正在为我编写的扩展方法编写一些单元测试IPrincipal.为了提供帮助,我创建了几个辅助类(为简洁起见,省略了一些未实现的接口成员的代码):

public class IPrincipalStub : IPrincipal
{
    private IIdentity identityStub = new IIdentityStub();

    public IIdentity Identity
    {
        get { return identityStub; }
        set { identityStub = value; }
    }
}

public class IIdentityStub : IIdentity
{
    public string Name { get; set; } // BZZZT!!!
}
Run Code Online (Sandbox Code Playgroud)

但是,接口中的Name属性IIdentity是只读的(IIDentity接口指定getter但不指定Name属性的setter).

如果接口已将其定义为只读属性,如何在存根对象中设置Name属性以进行测试?

Jas*_*yon 4

您正在使用 C# 的自动属性功能,但您应该采用手动路线并为属性创建一个支持字段。一旦有了支持字段,您就可以在构造函数中设置它的值(或者将其设为公共字段并在拥有对象后设置它,但这有点难看)。

public class IIdentityStub : IIdentity{
    private string _name;

    public IIdentityStub(string name){
        _name = name;
    }

    public string Name { get { return _name; } }
}
Run Code Online (Sandbox Code Playgroud)