Добавил:
выбрасываю тут свой мусор, надеюсь, что он кому-то может пригодится... Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP-KONEChNYJ.docx
Скачиваний:
20
Добавлен:
03.12.2023
Размер:
7.72 Mб
Скачать

31. Назначение подставного объекта и его отличие от заглушки.

Перед применением подставного объекта он подвергается настройке, в ходе которой задается ожидаемый сценарий его взаимодействия с тестируемым модулем. Задается последовательность вызовов методов подставного объекта, ожидаемые значения их входных аргументов, а также (внимание!) выходные значения (если есть), которые будут переданы тестируемому модулю. Таким образом, подставной объект способен как контролировать опосредованный вывод тестируемого модуля, так и управлять его опосредованным вводом, что делает его воистину неоценимым инструментом для тестирования межмодульного интерфейса (или интеграционного тестирования).

Заглушка просто принимает аргументы и обладает минимумом функционала. В подставные объекты же вложена логика, позволяющая управлять возвращаемыми значениями и ожидать определенных входных значений.

Подставной объект – такой поддельный объект, который определяет, прошел автономный тест или нет. Проверка делается не внутри подстановочного объекта, а именно в тесте.

Подставной объект может стать причиной не прохождения теста, заглушка – нет.

Пример:

Interface IWeb

{

Void Log(string message); //выводит сообщение(Message)

}

Public class FakeWeb:IWeb //класс для подстановочного объекта

{

Public string error;

Public FakeWeb(string message)

{

Error = message;

}

}

Public class LogAnalyzer {

Private IWeb service;

Public LogAnalyzer(IWeb service)

{

This.service = service;

}

Public void Analyze(string filename)

{

If (бла бла бла)

{

Service.Log(filename);

}

}

//тесты

FakeWeb service = new FakeWeb();

LogAnalyzer log = new LogAnalyzer(service); //тут взаимодействие между фейк классом(подстановкой) FakeWeb и тестируемым классом log.

String filename = “qwerty.txt”;

Log.Analyze(filename);

StringAssert.Contains(“qwerty.txt”, service.error);

(?) 32. Правила назначения имен классов, полей и методов. (С#)

Главное, чтобы названия соответствовали тому, за что отвечает поле, класс, метод. Не были слишком короткие. Главное – читабельность кода.

Pascal casing (каждое новое слово с заглавной) описываются имена:

  • всех определений типов, в том числе пользовательских классов, перечислений, событий, делегатов и структур;

  • значения перечислений;

  • readonly полей и констант;

  • интерфейсов;

  • методов;

  • пространств имен (namespace);

  • свойств;

  • публичных полей;

Camel casing (первое слово с маленькой, остальные с большой) Описываются имена:

  • локальных переменных;

  • аргументов методов;

  • защищенных (protected) полей.

Применяются следующие суффиксы и префиксы:

  • имена пользовательских классов исключений всегда заканчиваются суффиксом “Exception”;

  • имена интерфейсов всегда начинаются с префикса «I»;

  • имена пользовательских атрибутов всегда заканчиваются суффиксом «Attribute»;

  • имена делегатов обработчиков событий всегда оканчиваются суффиксом EventHandler, имена классов-наследников от EventArgs всегда заканчиваются суффиксом EventArgs.

Венгерская запись имен – слева или справа добавляется тип переменной. Имена классов д/б существительными, а методов – глаголами.

Если функция принимает в качестве аргумента флаг – ф-цию надо разделить.

Предпочтительны функции без аргументов, 3 и больше аргументов – плохо.

(?) 33. Правила написания комментариев в коде и автоматизированное формирование документации.

Начинайте каждый метод и процедуру с описания в комментарии того, что данный метод или процедура делает, параметров, возвращаемого значения и возможных ошибок и исключений. Опишите в комментариях роль каждого файла и класса, содержимое каждого поля класса и основные шаги сложного кода. Пишите комментарии по мере разработки кода.

Используйте комментарии без фанатизма. Использование комментариев не должно выходить за рамки. Когда вы пишите комментарий, то должны просто описать входящие и возвращаемые данные.

Нужно помнить, что желание написать комментарий говорит о сложности вашего алгоритма. Возможного его стоит упростить или разбить на части.

Автоматизированное форматирование настраивается в свойствах IDE.

Можно делать описание функций с помощью /// в C#.

Соседние файлы в предмете Объектно-ориентированное программирование