1

2つのプロジェクト用に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 に答える