Я использую этот подход (Swift 3):
import Foundation
class Dates {
static func printDatesBetweenInterval(_ startDate: Date, _ endDate: Date) {
var startDate = startDate
let calendar = Calendar.current
let fmt = DateFormatter()
fmt.dateFormat = "yyyy-MM-dd"
while startDate <= endDate {
print(fmt.string(from: startDate))
startDate = calendar.date(byAdding: .day, value: 1, to: startDate)!
}
}
static func dateFromString(_ dateString: String) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
return dateFormatter.date(from: dateString)!
}
}
, и я называю это следующим:
Dates.printDatesBetweenInterval(Dates.dateFromString("2017-01-02"), Dates.dateFromString("2017-01-9"))
Выход:
2017-01-02
2017-01-03
2017-01-04
2017-01-05
2017-01-06
2017-01-07
2017-01-08
2017-01-09
Этот беспорядок, кажется, довольно распространен. UT - все о покрытии кода. TDD касается в функции . Они не то же самое [жаль Joel!]
С UT, Вы пишете любой код, Вы хотите, затем возвратитесь и протестируйте каждую функцию (даже некоторые тривиальные).
С TDD, Вы выбираете следующую функцию, и пишут тест для той функции сначала . Только для записи тест для той функции и тестовое покрытие не важны . Вы пишете тест сначала, чтобы вынудить интерфейсные решения быть сделанными честными. Затем Вы пишете код, чтобы пройти тест (принимающий во внимание 'самую простую вещь, которая может возможно работать'). Затем Вы осуществляете рефакторинг код на основе того, что Вы изучили. Затем Вы переходите к следующей функции (по-видимому, после регистрации и повторного выполнения весь модульные тесты).
При желании разработайте использование, TDD затем возвращается и полный обзор с инструментами UT. Если Вы создаете библиотеку классов или другой API для разработчиков для использования, чем больше тестового покрытия, тем лучше ;-)
, Если Вы просто пишете приложение, чтобы сделать пять определенных вещей, один только TDD должен быть достаточным.
Я думаю, что существует немного Shu-Ha-Ri здесь. Вы задаете вопрос, который трудно объяснить. Это только после практикует и изо всех сил пытается применить TDD, который Вы получите Какой. До тех пор мы дадим Вам ответы, которые не имеют смысла, говоря, что Вы наполняете в рывке , Монады Являются Буррито . Это не поможет Вам, и мы будем походить на идиотов (монады являются ясно кругом лимонного шифона).
я рекомендовал бы получить Kent Beck книга TDD и работать через него и затем просто практиковать. "Нет никакой королевской дороги к Ri".
Это универсальные инструкции, которые я нахожу полезными для поблочного тестирования:
1) Определяют Граничные Объекты (Победа/Веб-формы, CustomControls и т.д.).
2) Определяют, что Объекты управления (Бизнес-расположенные на слое объекты)
3) Удостоверяются, что Записали Модульные тесты, по крайней мере, на открытые методы объектов управления, вызванные граничными объектами.
Этот способ, которым Вы будете уверены, что покрываете основные функциональные аспекты (функции) Вашего приложения и Вы не рискуете микротестировать (если Вы не хотите).
Протестируйте контракт интерфейса модуля, который Вы тестируете:
клиентом я имею в виду код, которые используют Ваш класс.
ожидаемым поведением я имею в виду ожидаемый результат метода на возвращаемых значениях и объектных состояниях.
И фокус Ваши тесты на логика (если, поскольку, в то время как, и т.д.), потому что плоский материал как свойства имеет меньшие возможности сбоя, не будучи пойманным нормальной эксплуатацией Вашего приложения.
В TDD Вы пишете спецификации системного поведения и используете их для управления дизайном системы. Вы пишете один тест для одного крошечного поведения, затем наблюдаете тест, чтобы привести к сбою, и затем написать код, чтобы пройти тест. В любом случае Вы сохраняете качество кода максимально высоко путем рефакторинга регулярно, так, чтобы внесение большего количества изменений было легче.
Примеры того, как сделать TDD: http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata
Также видит мой ответ от стандарты Записи для поблочного тестирования - это имеет примеры и ссылки для получения дополнительной информации. Вот также хорошие ссылки для следования: http://code.google.com/p/instinct/wiki/UsersGuide
Я не потрудился тестировать простые вещи, как метод считывания или метод set. Вы не должны тестировать сам компилятор, таким образом проверяя, что значение присвоено, когда Вы звоните, метод set не полезен.
В целом я пытаюсь записать модульный тест на каждый метод класса, который имеет фактический код. Таким образом, если кто-то когда-нибудь повреждает метод позже, он будет пойман.
, Например, кто-то изменил метод как "addElements (Строка [] элементы)". Они пытались использовать "для (интервал i=0; i< =elements.length; я ++)". За пределы исключение было выдано, когда модульные тесты бежали за регистрацией, и это было зафиксировано.
Для чего-то как GuestBookController, могут быть методы, которые можно протестировать офлайн, но необходимо будет, вероятно, на самом деле настроить соединение с сервером базы данных тестирования. Оттуда, имейте тест, чтобы добавить сообщение, отредактировать сообщение и удалить сообщение, проверяющее в каждом, который изменение произошло с помощью метода, который получает сообщение.
Поблочное тестирование должно заставить Вас быть уверенными больше, что Ваш код работает, и что при внесении изменения, оно все еще работает. Добавьте код поблочного тестирования, пока Вы не уверены, что он соответственно тестируется. В вышеупомянутом примере Вы не должны волноваться так же о случайном повреждении гостевой книги. При внесении изменения в код модульный тест подтверждает, что можно все еще добавить, удалить, отредактировать и получить сообщения.
Я думаю, что можно получить большую часть выгоды от Модульного теста Разработкой через тестирование / Тест Первая Разработка. Вы должны первый тест записи затем писать код, которые проходят тест. И Что необходимо протестировать сначала?
я нахожу это действительно полезным для тестов записи из пользовательских историй. Большую часть времени я пишу Нисходящие тесты стиля из стартовых пользовательских историй. Например, наша пользовательская история containt такая задача:
я обычно тест Записи для этой истории от уровня
[Test]
public void When_User_Save_Order_View_Should_Display_Information_Message()
{
using (mockRepository.Record())
{
repository.Save(order);
view.Message= "Order saved successfully";
}
using (mockRepository.Playback())
{
presenter = new OrderSavePresenter(view, orderRepository);
presenter.Save();
}
}
презентации/контроллера И затем я продолжаю к тесту записи на каждого классы, которые я дразнил или нуждался.
, Но действительно, запишите тест для бита кода, что Вы собирающийся запись . Наблюдайте, что он перестал работать. Затем напишите как раз достаточно кода, чтобы заставить его передать. Теперь запишите другой тест и повторение.