Как протестировать Drive при сборке динамической сборки

Я работаю над созданием динамического контекстного драйвера для LINQPad для баз данных IBM Db2. Я тестировал большую часть кода и думаю, что уже закончил получать всю необходимую мне информацию о базе данных, которая мне нужна. (Возможно, мне понадобится больше позже, но пока это кажется достаточным). Я скачал git-репозиторий для драйвера контекста PostgreSQL и посмотрел (немного), как он построен. Мне не хватает тестов, чтобы чувствовать себя уверенно, что я собираю сборку. Но потом я подумал, что если я начну собирать эту динамическую сборку, я понятия не имею, как это протестировать. Я хотел начать просто так:

[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)
    }
}

так это правильный подход? Это как я бы это сделал?

1 ответ

Решение

Чтобы обобщить ваш вопрос, вы спрашиваете, как лучше протестировать сборку, которая создается динамически. Сложность в том, что рассматриваемая сборка не существует, пока вы не запустите код для ее генерации, поэтому вы не можете ссылаться на сборку и статически связываться с ней.

Я могу придумать два обходных пути. Либо есть два отдельных проекта - один, который генерирует сборки, которые получают сборку динамически, и другой проект, который ссылается и тестирует эти сборки.

Другим обходным решением является динамическая загрузка сборки и типов с помощью Assembly.LoadFile, а затем GetType (...) в сборке. Затем вы можете создать его экземпляр с помощью Activator.CreateInstance, а затем преобразовать объект в динамический, чтобы получить доступ к его свойствам и методам.

Другие вопросы по тегам