Научиться работать с динамической загрузкой библиотек в C#.
Необходимо создать три проекта:
interface ICommand
{
void Execute();
}
Execute()
.Ознакомбтесь с источниками, указанными в списке литературы, коотрый указан в конце данного задания.
ICommand
CommandLib
.public interface ICommand
{
void Execute();
}
Создайте новый проект типа Class Library с именем FileSystemCommands.
Добавьте ссылку на CommandLib.
Реализуйте две команды:
DirectorySizeCommand
– вычисляет размер каталога.FindFilesCommand
– находит файлы по маске.Создайте консольное приложение CommandRunner
.
Добавьте ссылку на CommandLib
.
Реализуйте загрузку команд из DLL и их выполнение.
Создайте проект типа xUnit Test Project.
Напишите тесты для проверки команд:
public class FileSystemCommandsTests
{
[Fact]
public void DirectorySizeCommand_ShouldCalculateSize()
{
var testDir = Path.Combine(Path.GetTempPath(), "TestDir");
Directory.CreateDirectory(testDir);
File.WriteAllText(Path.Combine(testDir, "test1.txt"), "Hello");
File.WriteAllText(Path.Combine(testDir, "test2.txt"), "World");
var command = new DirectorySizeCommand(testDir);
command.Execute(); // Проверяем, что не возникает исключений
Directory.Delete(testDir, true);
}
[Fact]
public void FindFilesCommand_ShouldFindMatchingFiles()
{
var testDir = Path.Combine(Path.GetTempPath(), "TestDir");
Directory.CreateDirectory(testDir);
File.WriteAllText(Path.Combine(testDir, "file1.txt"), "Text");
File.WriteAllText(Path.Combine(testDir, "file2.log"), "Log");
var command = new FindFilesCommand(testDir, "*.txt");
command.Execute(); // Должен найти 1 файл
Directory.Delete(testDir, true);
}
}
Дополните тесты так, чтобы они проверяли корректность выполнения команд.
Интерфейсы в C# - Microsoft Docs
Официальная документация по работе с интерфейсами в C#
Работа с рефлексией: Assembly.LoadFrom - Microsoft Docs
Документация по динамической загрузке сборок в .NET
Модульное тестирование с xUnit - Microsoft Docs
Руководство по созданию unit-тестов с использованием xUnit
Работа с файловой системой в .NET - Microsoft Docs
Полное руководство по файловым операциям и потокам ввода-вывода
Рефлексия в .NET - Microsoft Docs
Основные концепции рефлексии и динамического программирования
Паттерн "Команда" - Microsoft Learn
Объяснение паттерна Command в контексте .NET