0

IBM Db2 データベース用の LINQPad 用の動的コンテキスト ドライバーの構築に取り組んでいます。私はコードの大部分をテストしてきましたが、必要なデータベースについて必要なすべての情報を取得するのはほぼ完了したと思います。(後でもっと必要になるかもしれませんが、今のところは十分です)。PostgreSQL コンテキスト ドライバーの git リポジトリをダウンロードし、それがどのように構築されているかを (ある程度) 確認しました。アセンブリを構築していることを確信するには、十分なテストがありません。しかし、この動的アセンブリの構築を開始する場合、これをテストする方法がわかりません。次のように簡単に始めたかったのです。

[TestFixture]
public class Db2DynamicAssemblyBuilderTests
{
    [Test]
    public void DynamicClassHasMatchingNameAsTable()
    {
        List<Models.Db2TableInformation> tableInformation = new List<Models.Db2TableInformation>();
        tableInformation.Add(new Models.Db2TableInformation()
        {
            Schema = "Schema",
            TableName = "TableName"
        });
        AssemblyName assemblyToBuild = new AssemblyName(@"c:\temp\someassembly.dll");//somehow build this with a dynamic name???? i'll figure this out
        string nameSpace = "LINQPad.User";
        string typeName = "TypeDataContext";
        var target = new Db2DynamicAssemblyBuilder(assemblyToBuild, nameSpace, typeName);

        target.Build(tableInformation);

        //??? Load assembly?
        //Get Class LINQPad.User.Schema.TableName (or maybe just LINQPad.User.TableName...not sure yet)
    }
}

これは正しいアプローチですか?これは私がそれを行う方法ですか?

4

1 に答える 1

1

質問を一般化するために、動的に構築されるアセンブリを単体テストする最善の方法を尋ねています。問題のアセンブリは、コードを実行して生成するまで存在しないため、アセンブリを参照して静的にバインドすることはできません。

2 つの回避策が考えられます。1 つは動的にビルドされるアセンブリを生成するプロジェクトで、もう 1 つはそれらのアセンブリを参照してテストするプロジェクトです。

もう 1 つの回避策は、Assembly.LoadFile を使用してアセンブリと型を動的にロードし、次にアセンブリで GetType (...) をロードすることです。次に、Activator.CreateInstance でインスタンス化し、オブジェクトを動的にキャストして、そのプロパティとメソッドにアクセスできます。

于 2016-02-05T09:06:36.573 に答える