Лекция
Привет, Вы узнаете о том , что такое управление зависимостями в модульных тестах, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое управление зависимостями в модульных тестах , настоятельно рекомендую прочитать все из категории Разработка программного обеспечения и информационных систем.
Управление зависимостями
● На практике случаи хорошо изолированного кода довольно редки
Виды зависимостей
● Injecting dependencies (respecting DI)
class A{ B b;
public setB(B b) {this.b = b;}
...
}
Compiled dependencies (for instance referencies Filesystem API)
class A{
public void methodToTest(){
...
InputFile inStream = new InputFileStream("input.txt");
...
inStream.read(buffer);
...
}
}
Управление зависимостями («Плохой пример»)
class A{
private B bInstance;
public setB(B bInstance){
this.bInstance = bInstance;
}
public int myMethod(int number){
...
bInstance.doSomething(1,2);
...
return number;
}
}
class B{
public void doSomething(){
...
}
}
class MyATest extends TestCase{
@Test
public void testWithSImpleInput(){
// initialization
A a = new A();
B b = new B();
a.setB(b);
// execution
int actual = a.myMethod(4);
//verification
int expected = 2;
assertEquals(expected, actual);
}
}
Проблемы модульных тестов без устранения зависомостей
● Плавающие ошибки. Об этом говорит сайт https://intellect.icu . Трудность их нахождения. Потеря времени.
● Без устранения зависимостей модульные тесты являются де-факто интеграционными.
Управление зависимостями
● Для успешного модульного тестирования необходимо все зависимости «устранить». Иначе потенциальные дефекты в зависимостях могут повлиять на успех тестов и усложнить поиск дефектов.
● Устранение заключается в том, что все зависимые объекты заменяются «фейковыми» которые ведут себя именно так как ожидаете вы.
● Mocks … replace a class with a small substitute (“mocks”) that implements the same interface.
● Shims … modify the compiled code at run time, to inject and run a substitute (“shim”).
● Необходимы эффективные средства для создания таких «фейковых» объектов на лету.
Mocking frameworks
Java
C#
Injecting dependencies
Управление зависимостями случай - Stubbing (корчеватели)
Управление зависимостями случай - Stubbing (AnyParameter)
Управление зависимостями случай - Verifying
Управление зависимостями случай — Invocation Counting
Управление зависимостями случай — Consecutive Calls
Управление зависимостями случай — Partial Mocking
Compiled dependencies
Как делать?
● Оберните в private метод, который может быть легко переопределить от наследника или частично заменить (частичная насмешливый)
● Используйте прокладки и специальные структуры (PowerMock) взамена с поддельной код
Управление зависимостями Dummy
Dummy — объекты, которые передаются как
параметры но никогда не используются.
● Часто используются чтобы заполнить массив
тестовыми данными :
int[] k = {1, 2, 3};
...
● Или вызвать метод, где параметр требуется но не
имеет значения:
doSomething(123, new Integer(0));
Управление зависимостями Mocks
Mocks — объекты, которые перепрограммированы на ожидание того какие параметры они получат и что вернут
Mocks используется там где недостаточно Dummies, т. е. от объектов требуется поведение.
Mocks отражают концепцию «behavior verification».
● Mocks создаются декларативно через правила,как бы «нанизывая поведение друг на друга»
Управление зависимостями Stubs
Stubs — объекты-заглушки, очень похожи на Mocks, однако основное отличие состоит в том, что Stub создается недекларативно, используя
обычные примитивы языка. Stubs отражают концепцию «state verification».
● Во многих случаях Stubs могут быть реализованы через Mocks что являетсяпредпочтительным.
More Advices
Тестирование объектов в которых есть обращение к внешним устройствам, таким как БД или сеть (отправка emails, обмен данными).
● Решается как правило использованием Mocks или Fakes, в зависимости от сложности поведения.
В заключение, эта статья об управление зависимостями в модульных тестах подчеркивает важность того что вы тут, расширяете ваше сознание, знания, навыки и умения. Надеюсь, что теперь ты понял что такое управление зависимостями в модульных тестах и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Разработка программного обеспечения и информационных систем
Из статьи мы узнали кратко, но содержательно про управление зависимостями в модульных тестах
Комментарии
Оставить комментарий
Разработка программного обеспечения и информационных систем
Термины: Разработка программного обеспечения и информационных систем