Как протестировать 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, а затем преобразовать объект в динамический, чтобы получить доступ к его свойствам и методам.