теория_4 (Методичка и инструкции на ЛР №8), страница 2
Описание файла
Файл "теория_4" внутри архива находится в следующих папках: Методичка и инструкции на ЛР №8, Инструкции, Задание_4. Документ из архива "Методичка и инструкции на ЛР №8", который расположен в категории "". Всё это находится в предмете "технологии разработки программного обеспечения (по)" из 10 семестр (2 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "технологии разработки по" в общих файлах.
Онлайн просмотр документа "теория_4"
Текст 2 страницы из документа "теория_4"
CalcClass.dll
cmpparam.ReferencedAssemblies.Add(Application.StartupPath +
"\\CalcClass.dll");
cmpparam.ReferencedAssemblies.Add("System.dll");
cmpparam.ReferencedAssemblies.Add("System.Windows.Forms.dll");
// имя выходной сборки - My.dll
cmpparam.OutputAssembly = "My.dll";
// компилируем класс AnalaizerClass с заданными параметрами
System.CodeDom.Compiler.CompilerResults res =
prov.CompileAssemblyFromFile(cmpparam, Application.StartupPath + "\\AnalaizerClass.cs");
// Выводим результат компилирования на экран
if (res.Errors.Count != 0)
{
richTextBox1.Text += res.Errors[0].ToString();
}
else
{
// загружаем только что скомпилированную сборку(здесь тонкий
момент - если мы прото загрузим сборку из файла, то он будет заблокирован,
// acces denied, поэтому вначале читаем его в поток и лишь
потом подключаем)
System.IO.BinaryReader reader = new
System.IO.BinaryReader(new System.IO.FileStream(Application.StartupPath + "\\My.dll", System.IO.FileMode.Open, System.IO.FileAccess.Read));
Byte[] asmBytes = new Byte[reader.BaseStream.Length];
reader.Read(asmBytes, 0, (Int32) reader.BaseStream.Length);
reader.Close();
reader = null;
System.Reflection.Assembly assm =
System.Reflection.Assembly.Load(asmBytes);
Type[] types = assm.GetTypes();
Type analaizer = types[0];
// находим метод CheckCurrency - к счастью, он единственный
System.Reflection.MethodInfo addinfo =
analaizer.GetMethod("RunEstimate");
System.Reflection.FieldInfo fieldopz =
analaizer.GetField("opz");
System.Collections.ArrayList ar = new
System.Collections.ArrayList();
ar.Add("2");
ar.Add("2");
ar.Add("+");
fieldopz.SetValue(null, ar);
richTextBox1.Text += addinfo.Invoke(null, null).ToString();
asmBytes = null;
}
prov.Dispose();
}
Пример 9.1.
Замечание. На самом деле данный подход позволяет выявить множество недостатков программы, которые другими тестами не выявляются. Можно попробовать поэкспериментировать с "Калькулятором" и убедиться, что он работает корректно. Однако, если в тестируемый метод подать на вход не "2", "2", "+", а "2", "2", "+", "+", то программа закончит работу с исключением. Это говорит о том, что метод RunEstimate написан не корректно. Можно, например, было бы скрыть, т. е. сделать доступ private, всем методам AnalaizerClass, кроме Estimate (это было бы более правильно, но для простоты тестирования они сделаны public. Стоит отметить, что Visual Studio 2005 имеет также механизмы для тестирования подобных методов.). Тем самым мы не позволим другим выполнять "потенциально опасные" методы и передавать им некорректные значения. Однако это не является достаточным механизмом защиты программы. Необходимо провести более качественную валидацию используемых методами параметров.
Замечание. К проблеме создания тестового окружения можно подойти с двух сторон – либо откомпилировать код, с заранее подключенными dll файлами к проекту, либо воспользоваться областью CodeDom и компилировать в процессе выполнения. Это особенно удобно, если нужно менять тестовое окружение в процессе работы.
9.3. Раздаточный материал
9.3.1. Программа
Будут выданы .dll файлы, которые нужно протестировать методом "черного ящика" и пример тестового драйвера.
9.4. Задание
Составить тест-план и провести модульное тестирование своей программы.