测试单身人士

时间:2010-02-15 19:28:08

标签: c# unit-testing testing singleton

我在构造函数中创建了一个单例,如下所示:

public static class MyCertificate
{
    private readonly static X509Certificate2 _singletonInstance = new X509Certificate2();

    static MyCertificate()
    {
        if(_singletonInstance == null)
            _singletonInstance = GetMyCertificateFromDatabase();
    }

    public static X509Certificate2 MyX509Certificate
    {
        get { return _singletonInstance; }
    }
...
}

MyX509Certificate属性返回_sigletonInstance。

我需要做的是调试被调用的方法,例如GetMyCertificateFromDatabase()。所以在an.aspx.cs中我有这个:

    protected void Page_Load(object sender, EventArgs e)
    {
        InsertCertificate();
    }

    private static void InsertCertificate()
    {
        X509Certificate2 certificate;

        certificate =  MyCerfiticate.MyX509Certificate;

    }

我不太确定如何单步执行以便我可以逐步调用有助于设置该单例的方法。它只是步骤到属性然后在我调试InsertCertificate()

时返回

5 个答案:

答案 0 :(得分:2)

我假设你正在使用visual studio。在visual studio中,转到“工具” - >“选项” - >“调试”,然后取消选中“跳过属性和运算符”框。

编辑:我刚刚注意到您执行了以下操作:

private readonly static X509Certificate2 _singletonInstance = new X509Certificate2();

这会阻止你的_singletonInstance在检查时变为null。

答案 1 :(得分:2)

在调用MyCertificate()之前初始化

_singletonInstance。在那里,检查_singletonInstance是否为null,因为它不是,所以不会调用GetMyCertificateFromDatabase。

答案 2 :(得分:1)

为什么不尝试在MysCertificate静态构造函数中设置断点?这应该有所帮助。

答案 3 :(得分:0)

在模块窗口中,具有单件的模块是否出现在列表中?是否加载了符号。如果没有,为它手动加载符号,然后你应该能够调试它。

答案 4 :(得分:0)

public static class MyCertificate
{
    private readonly static X509Certificate2 _singletonInstance = GetMyCertificateFromDatabase();

    public static X509Certificate2 MyX509Certificate
    {
        get { return _singletonInstance; }
    }
...
}

通过初始化在字段上设置断点。