mock static C#数据库类

时间:2012-12-06 22:30:23

标签: c# database mocking

我正在C#中为两个项目构建一个类库。此类库与SQLServer数据库建立了很多连接。

由于此库仅从SQLServer数据库中检索数据,因此有一个静态类负责加载连接设置并将其打开。然后,库的类接收执行查询所需的数据并返回结果。所有这些都是使用静态方法完成的。

像这样。

internal static class DBConnection
{
    private const String connectionString = "some connection string";
    public static SqlConnection open() { /* ... open the connection ... */ }
}

public static class DataXRetriever
{
    public static List<DataX> RetrieveById(Int32[] ids)
    {
        using (SqlConnection connection = DBConnection.open())
        {
            /* ... do a query ... */
            /* ... do something with the result of the query ... */
            /* ... return it ... */
        }
    }

    /* ... some other static methods ... */
}

我想为这些方法创建一个测试单元,而不需要连接到数据库,我一直在读这可以完成实例化包含连接的类并将其提供给类使用它,但我的设计并不像那样。

1 个答案:

答案 0 :(得分:1)

您可以允许代码修改连接字符串而不是使其成为静态,然后让单元测试设置代码在运行测试之前更改其值。 (更新:第二个想法,对于你想要做的具体事情,即使那样也不会真的有效。

正确的方法是针对注入到您的类中的接口进行编程,以便可以根据具体情况轻松模拟它们。

换句话说,如果您的设计“不能像那样工作”,那么您的设计是错误的,需要进行更改。