Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
16th
Июн
Test-Driven Development для Java (TDD, разработка через тестирование) на практике.
Posted by admin under Исходники, Статьи, Топик-обзор
alexinspir:
Test-Driven Development (TDD, разработка через тестирование) является одной из основополагающих техник экстремального программирования, но к сожалению, в россии очень немногие разработчики умеют ею пользоваться.
Разработка через тестирование подразумевает следующие этапы, которые в 90% случаев идут строго по порядку(об оставшихся 10% скажу позднее):
1. пишется пустой класс А (релизный)
5. реализуем все методы в классе A, прогоняем тесты — все тесты должны завершиться успешно.
Для работы парсеров проекта, нам нужен ридер, который бы позволял либо ставить множественные метки, либо позволял откатываться назад на любую позицию.
Я посчитал что откат будет удобнее, чем множественные метки.
Этот функционал будет реализовывать класс RollbackReaderWrapper.
/*
* Copyright 2011 Aleksandr Akhtyamov.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ru.wsdev.kelvina.system.io;
/**
* Служит в качестве обертки вокруг java.io.Reader.
* Расширяет функционал Reader'а, позволяя откатывать
* позицию курсора на любую позицию в заранее определенном интервале.
* @author Aleksandr Akhtyamov
*/
public class RollbackReaderWrapper {
}
Для того чтобы определиться какой функционал требуется от класса, мы создадим тестовый класс RollbackReaderWrapperTest.
Методами тестового класса(далее — тестовые методы [Test Method]), мы будем определять весь функционал, который нам потребуется от релизного класса.
Каждый тестовый метод будет реализован в соответствии с принципом «проверяйте одно условие за тест» (Verify One Condition per Test).
Комментарии на русском языке даны чисто для объяснения моих рассуждений, в тестах практически не пишут документационные комментарии.
*
* Copyright 2011 Aleksandr Akhtyamov.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ru.wsdev.kelvina.system.io;
import static org.junit.Assert.fail;
import org.junit.Test;
/**
* @author Aleksandr Akhtyamov
*
*/
public class RollbackReaderWrapperTest {
/*
* В релизном классе должен быть только один конструктор,
* который принимает оборачиваемый ридер и размер буфера.
* Он НЕ ДОЛЖЕН конструировать объект, если обрачиваемый ридер есть null.
*/
@Test
public void testNullPointerWrappedReader(){
fail("not implemented yet");
}
/*
* В релизном классе должен быть метод,
* который активизирует буферизацию, чтобы возможен был откат.
*/
@Test
public void testEnableBuffer(){
fail("not implemented yet");
}
/*
* В релизном классе должен быть метод,
* который деактивирует буферизацию.
*/
@Test
public void testDisableBuffer(){
fail("not implemented yet");
}
/*
* В релизном классе должен быть метод,
* который возвращает текущее заполнение буфера (размер содержимого).
*/
@Test
public void testBufferFilling(){
fail("not implemented yet");
}
/*
* В релизном классе должен быть метод,
* который реализует откат
*/
@Test
public void testRollback(){
fail("not implemented yet");
}
/*
* У буфера должен быть размер, при откате большем чем размер буфера,
* должно кидаться исключение
*/
@Test
public void testBufferOverflow(){
fail("not implemented yet");
}
/*
* В релизном классе должен быть метод,
* который говорит, активирована буферизация или нет.
* мы должны проверить, то что он адекватно говорит об активной буферизации.
*/
@Test
public void testBufferMustBeEnabled(){
fail("not implemented yet");
}
/*
* и адекватно говорит об отключенной буферизации
*/
@Test
public void testBufferMustBeDisabled(){
fail("not implemented yet");
}
/*
* По скольку мы реализуем обертку вокруг ридера, то обертка вполне может быть
* сабклассом java.io.Reader, и переопределять все его методы.
* Проверим что RollbackReaderWrapper наследует ридер.
*/
@Test
public void testKindOfRollbackReaderWrapperTestIsReader(){
fail("not implemented yet");
}
}
Далее в теме на programmersforum.ru — Test-Driven Development на практике. TDD.
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)