Содержание
- 2. 3 Определение Разработка через тестирование (англ. test-driven development) — техника программирования, при которой модульные тесты для
- 3. 4 Цикл разработки (кратко) Красный — напишите небольшой тест, который не работает, а возможно, даже не
- 4. 5 Цикл разработки (схема)
- 5. Цикл разработки 1. 2. 3. 4. Из репозитория извлекается программная система, находящаяся в согласованном состоянии, когда
- 6. Цикл разработки (продолжение) 5. 6. 7. 8. Весь набор тестов выполняется успешно. Теперь, когда требуемая в
- 7. Что дает TDD? Актуальное описание намерений, дизайна и использования системы Легкое обнаружение слабых мест в дизайне
- 8. 8 Пример 1. Числа Фибоначчи Последовательность Фибоначчи определяется следующим соотношением: F(n) = F(n – 1) +
- 9. 9 } Пример 1. (продолжение) Первый тест [Test] public void TestFirstFibonacciNumber() { Assert.AreEqual(0, MathUtils.Fibonacci(0)); } Реализация
- 10. 10 Пример 1. (продолжение)
- 11. 11 Пример 1. (продолжение) public void TestSecondFibonacciNumber() { Assert.AreEqual(1, MathUtils.Fibonacci(1)); } Проверяем второй член последовательности
- 12. 12 Пример 1. (продолжение)
- 13. 13 Пример 1. (продолжение) public static uint Fibonacci(uint n) { if (n == 0) return 0;
- 14. 14 Пример 1. (продолжение)
- 15. 15 Пример 1. (продолжение) public void TestThirdFibonacciNumber() { Assert.AreEqual(1, MathUtils.Fibonacci(2)); } public void TestFourthFibonacciNumber() { Assert.AreEqual(2,
- 16. 16 Пример 1. (продолжение)
- 17. 17 Пример 1. (продолжение) public static uint Fibonacci(uint n) { if (n == 0) return 0;
- 18. 18 Пример 1. (продолжение)
- 19. 19 Пример 2. Функция CombinePaths Требуется реализовать функцию, складывающюю два пути. Например: C:\Data\ + MySQL\data.sql =
- 20. 20 Пример 2. (продолжение) type TCombinePathTests = class(TTestCase) published procedure TestCombineSimplePaths; end; procedure TCombinePathTests.TestCombineSimplePaths; begin CheckEquals(
- 21. 21 Пример 2. (продолжение) function CombinePaths(const APath1, APath2: string): string; begin Result := EmptyStr; end; Реализация
- 22. 22 Пример 2. (продолжение)
- 23. 23 Пример 2. (продолжение) function CombinePaths(const APath1, APath2: string): string; begin Result := APath1 + APath2;
- 24. 24 Пример 2. (продолжение)
- 25. 25 Пример 2. (продолжение) procedure TCombinePathTests. TestCombinePathsWithoutTrailingSlash; begin CheckEquals( C:\file_name.txt', CombinePaths('C:', 'file_name.txt') ); end;
- 26. 26 Пример 2. (продолжение)
- 27. 27 Пример 2. (продолжение) function CombinePaths(const APath1, APath2: string): string; begin Result := IncludeTrailingPathDelimiter(APath1)+ APath2; end;
- 28. 28 Пример 2. (продолжение)
- 29. 29 Пример 2. (продолжение) procedure TCombinePathTests. TestCombinePathsWithEmptyFirstPath; begin CheckEquals( 'file_name.txt', CombinePaths('', 'file_name.txt') ); end;
- 30. 30 Пример 2. (продолжение)
- 31. 31 Пример 2. (продолжение) function CombinePaths(const APath1, APath2: string): string; begin if APath1 = EmptyStr then
- 32. 32 Пример 2. (продолжение)
- 33. Пример 2. (продолжение) 33 function CombinePaths(const APath1, APath2: string): string; begin if IsAbsolutePath(APath2) or (APath1 =
- 34. Приёмы (паттерны) TDD ● ● ● ● ● ● Изолированный тест (Isolated Test) Список тестов (Test
- 35. Изолированный тест ● ● ● Если не проходит один тест, другие не должны свалиться вслед за
- 36. Список тестов ● ● ● Запишите все тесты, которые хотите реализовать, и придерживайтесь этого списка. От
- 37. Сначала утверждение ● ● ● Такой подход позволяет мгновенно ответить на два важных вопроса: «Что считать
- 38. Тестовые данные ● ● ● Не используйте одинаковые данные. Если нет разницы между 1 и 2,
- 39. Понятные данные ● ● ● При тестировании должно быть очевидно, откуда берется тот или иной результат.
- 40. Понятные данные (пример) Bank bank = new Bank(); bank.addRate("USD", "GBP", STANDARD_RATE); bank.commission(STANDARD_COMMISSION); Money result = bank.convert(new
- 41. Arrange – Act – Assert [Test] public void TestTranslate() { // Arrange. // Здесь выставляются начальные
- 42. Arrange – Act – Assert (пример 2) // Arranging var annualSalary = 120000M; var period =
- 43. Arrange – Act – Assert Преимущества использования этого паттерна: Assert-методы никогда не перемешаются с Act-методами Неявное
- 44. Инструменты unit-тестирования
- 45. Список инструментов ● ● ● ● ● Java: JUnit; C++: CppUnit, Boost Test; Delphi: DUnit; PHP:
- 46. BDD BDD (behavior-driven development) — расширение подхода TDD к разработке и тестированию, при котором особое внимание
- 47. На каких принципах базируется TDD? «Делай проще, дурачок» (keep it simple, stupid, KISS) «Вам это не
- 48. Выводы Гораздо больше времени уходит на реализацию простого класса, чем это требуется при написании кода «в
- 49. Выводы Помимо самого класса вы получите полный набор тестов для него. Для разработчика нет больше преимущества,
- 50. Выводы При использовании TDD легче обдумывать, что вы хотите получить от класса, его поведение и варианты
- 51. Выводы Самое главное: уменьшаются зависимости между классами, увеличивается сцепление классов!
- 52. Вопросы для самостоятельного изучения В каких задачах методология TDD не применима? Чем отличаются тесты, созданные по
- 53. Дополнительный материал Описание терминологии и технологии разработки через тестирование в различных инструментах: xUnit Junit NUnit CppUnit
- 54. xUnit. Терминология ● ● ● ● Тестовый метод (test method) Метод, в котором выполняется проверка работы
- 55. xUnit. Порядок вызова Class SetUp Method SetUp Method SetUp Test Method 1 Test Method 2 Method
- 56. JUnit 3 ● ● ● JUnit — библиотека для тестирования программного обеспечения на языке Java. Создана
- 57. JUnit 3. Организация тестов Класс TestCase ● Разработчик наследует свои классы тестов от этого класса. ●
- 58. JUnit 3. Организация тестов Класс TestSuite ● Используется для формирования набора тестов. ● Наборы тестов могут
- 59. JUnit 3. Утверждения Класс Assert ● Содержит специальные методы сравнения ● ● ● ● Сравнение на
- 60. JUnit 3. Пример public class TestGame extends TestCase { private Game g; public void setUp() {
- 61. NUnit ● ● ● ● NUnit — открытая среда юнит- тестирования приложений для .NET (включая платформу
- 62. NUnit. Организация тестов Для оргнизации тестов используются атрибуты: ● [Test] помечает тестовый метод. ● [TestFixture] помечает
- 63. NUnit. Утверждения Класс Assert ● Класс содержит статические методы проверки фактических значений с ожидаемыми: ● ●
- 64. NUnit. Пример [TestFixture] public class TestGame { private Game game; [SetUp] public void SetUp() { game
- 65. NUnit. Утверждения С версии NUnit 2.4 введены constraint-based утверждения. Новый тип утверждений базируется на статической функции
- 66. NUnit. Утверждения Assert.That(myString, Is.EqualTo("Hello")); Assert.That(7, Is.GreaterThanOrEqualTo(3)); Assert.That(phrase, Contains.Substring("tests fail")); Assert.That(phrase, Is.Not.StringContaining("tests pass")); Assert.That(3, Is.LessThan(5) | Is.GreaterThan(10));
- 67. CppUnit ● ● ● CppUnit – библиотека тестирования для языка C++. Является портом с JUnit на
- 68. CppUnit. Организация тестов ● ● ● CPPUNIT_TEST_SUITE, CPPUNIT_TEST_SUITE_END создают набор тестов. CPPUNIT_TEST создаѐт тестовый метод. setUp(),
- 69. CppUnit. Утверждения ● Проверочные методы реализованы в виде макросов: ● ● ● ● ● CPPUNIT_ASSERT CPPUNIT_ASSERT_EQUAL
- 70. CppUnit. Пример class TestGame : public CPPUNIT_NS::TestFixture { CPPUNIT_TEST_SUITE(TestGame); CPPUNIT_TEST(testTwoThrowsNoMark); CPPUNIT_TEST_SUITE_END(); protected: Game * game; protected:
- 71. CppUnit. Пример void TestGame::setUp() { game = new Game(); } void TestGame::tearDown() { delete game; }
- 72. JUnit 4 ● ● JUnit 4 — новая версия библиотеки, построенная на появившихся в Java 5
- 73. JUnit 4. Организация тестов ● ● Набор тестов помещается в отдельный класс. Для организации тестов используются
- 74. JUnit 4. Утверждения Класс Assert ● Содержит набор статических методов, аналогичный набору JUnit 3 ● ●
- 75. JUnit 4. Пример 1 public class TestGame { @Test public void testTwoThrowsNoMark() { g = new
- 76. JUnit 4. Пример 2 public class TestGame { private Game g; @Before public void setUp() {
- 77. DUnit ● ● ● Dunit — инструмент тестирования для среды Borland Delphi. Первоначальная версия написана Juanco
- 78. DUnit. Организация тестов Класс TTestCase ● Разработчик наследует свои классы тестов от этого класса. ● Тестовые
- 79. DUnit. Утверждения Класс TTestCase содержит набор проверочных методов: ● CheckEquals/CheckNotEquals ● CheckNull/CheckNotNull ● CheckSame ● CheckIs
- 80. DUnit. Пример type TGameTest = class(TTestCase) private FGame: TGame; protected procedure SetUp; override; procedure TearDown; override;
- 82. Скачать презентацию