Я хочу добавить в jar-файл некоторые ресурсы. Я " На самом деле я на самом деле хочу убить любые локальные случайные изменения или слияния, чтобы не путать вещи.
Как мне вернуться к определенному набору изменений и уничтожить все локальные изменения? Это как-то связано с:
hg revert
---- ОБНОВЛЕНИЕ ---
Чтобы уточнить, что я хотел бы сделать, это сначала вернуть все локально в набор изменений 388, а затем убедиться, что мой локальный репо находится в таком состоянии. утверждаю, что когда я делаю
hg status
, я не получаю вывод. В противном случае у меня возникает неприятное ощущение, что когда я в следующий раз потяну за наконечник, возникнут конфликты, с которыми я хочу разобраться - которых я хочу избежать, потому что локальные изменения не имеют значения.
---- ОБНОВЛЕНИЕ ---
Для кого-то еще в этой ситуации то, что в конечном итоге исправило это для меня, было:
rm -rf <repo_dir>
hg clone http://repository
hg update -r 388
Это убьет все ваши локальные изменения, поэтому действуйте осторожно (но это то, что я хотел в этом случае). getCurrentTime () 'метод, чтобы я мог фальсифицировать, сколько сейчас времени?
Что другие обычно делают с тестами, зависящими от времени?
Определенно имитируйте новую дату ()
.
Создайте интерфейс Clock
с помощью метода getCurrentTime ()
или подобного. Таким образом, у вас может быть FakeClock
для тестирования и SystemClock
, который использует System.currentTimeMillis ()
или что-то еще.
Я проделывал это несколько раз - получилось очень хорошо. Это тоже логично - по сути, вам нужна «служба текущего времени», поэтому ее следует внедрять, как и любую другую зависимость.
Если вы считаете, что абстракция TimeProvider / Clock слишком перфекционистская (что вполне может иметь место), рассмотрите это вместо
Сделайте getCurrentType защищенным виртуальным, а затем создайте TestingProductionType, производный от ProductionType, содержащий опубликованный вами код. В этом типе переопределите метод getCurrentType (), чтобы он возвращал некоторый детерминированный результат. Вместо этого в модульном тесте создайте экземпляр этого TestingProductionType.
Виола, зависимость текущего времени теперь удалена из ваших модульных тестов. Единственный производственный код, который сейчас не тестируется, - это метод с единственной строкой, возвращающей new Date (). Я мог бы жить с этим.
Если вы можете проверить Mole на http://research.microsoft.com/en-us/projects/pex/
Moles позволяет заменить любой метод .NET на делегат
Просто используйте его, чтобы заменить Date, и он вернет все, что вам нужно. Тогда не нужно делать ничего сумасшедшего.
-Раул
Возможны все три подхода:
Я бы пошел на компромисс: я бы добавил текущую дату в качестве параметра в метод isExpired, а isValid метод. Для вашего реального производственного кода добавьте простое переопределение isValid ()
no-arg, которое вызывает isValid (new Date ())
. Ваш тестовый код использует версию, которая принимает текущую дату в качестве параметра.
Обычно я добавляю поставщик даты в проверяемый код. Это также помогает, если вам нужно изменить соглашения или иным образом «исправить» код проверки времени.
Используйте внедрение зависимостей и внедрите TimeProvider
, который предоставляет метод getExpiryDate ()
.