1

我正在为两个项目用 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 ... */
}

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

4

1 回答 1

1

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

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

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

于 2012-12-06T22:36:24.780 回答