2016-02-04 5 views
0

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

+0

Я рад, что вы сказали это, потому что я начал идти по этому пути, о котором вы говорите, с LoadFile. Самое приятное в том, что мне не нужно каждый раз удалять сборку (хотя мне, вероятно, теперь нужно, чтобы я подумал об этом), и меня интересует только класс, генерируемый публичными свойствами, поэтому тестирование этой части должно быть тривиальным. –