maven ресурсы не помещены в jar-файл

Я хочу добавить в jar-файл некоторые ресурсы. Я " На самом деле я на самом деле хочу убить любые локальные случайные изменения или слияния, чтобы не путать вещи.

Как мне вернуться к определенному набору изменений и уничтожить все локальные изменения? Это как-то связано с:

hg revert 

---- ОБНОВЛЕНИЕ ---

Чтобы уточнить, что я хотел бы сделать, это сначала вернуть все локально в набор изменений 388, а затем убедиться, что мой локальный репо находится в таком состоянии. утверждаю, что когда я делаю

hg status

, я не получаю вывод. В противном случае у меня возникает неприятное ощущение, что когда я в следующий раз потяну за наконечник, возникнут конфликты, с которыми я хочу разобраться - которых я хочу избежать, потому что локальные изменения не имеют значения.

---- ОБНОВЛЕНИЕ ---

Для кого-то еще в этой ситуации то, что в конечном итоге исправило это для меня, было:

rm -rf <repo_dir>
hg clone http://repository
hg update -r 388

Это убьет все ваши локальные изменения, поэтому действуйте осторожно (но это то, что я хотел в этом случае). getCurrentTime () 'метод, чтобы я мог фальсифицировать, сколько сейчас времени?

Что другие обычно делают с тестами, зависящими от времени?

15
задан tharindu_DG 25 May 2016 в 07:54
поделиться

6 ответов

Определенно имитируйте новую дату () .

Создайте интерфейс Clock с помощью метода getCurrentTime () или подобного. Таким образом, у вас может быть FakeClock для тестирования и SystemClock , который использует System.currentTimeMillis () или что-то еще.

Я проделывал это несколько раз - получилось очень хорошо. Это тоже логично - по сути, вам нужна «служба текущего времени», поэтому ее следует внедрять, как и любую другую зависимость.

24
ответ дан 1 December 2019 в 01:23
поделиться

Если вы считаете, что абстракция TimeProvider / Clock слишком перфекционистская (что вполне может иметь место), рассмотрите это вместо

Сделайте getCurrentType защищенным виртуальным, а затем создайте TestingProductionType, производный от ProductionType, содержащий опубликованный вами код. В этом типе переопределите метод getCurrentType (), чтобы он возвращал некоторый детерминированный результат. Вместо этого в модульном тесте создайте экземпляр этого TestingProductionType.

Виола, зависимость текущего времени теперь удалена из ваших модульных тестов. Единственный производственный код, который сейчас не тестируется, - это метод с единственной строкой, возвращающей new Date (). Я мог бы жить с этим.

2
ответ дан 1 December 2019 в 01:23
поделиться

Если вы можете проверить Mole на http://research.microsoft.com/en-us/projects/pex/ Moles позволяет заменить любой метод .NET на делегат Просто используйте его, чтобы заменить Date, и он вернет все, что вам нужно. Тогда не нужно делать ничего сумасшедшего.

-Раул

2
ответ дан 1 December 2019 в 01:23
поделиться

Возможны все три подхода:

  1. не тестируйте: lazy man's way
  2. используйте лицензию, срок действия которой не истекает целую вечность, пока вы не уволитесь с работы: покрыть мою ass way
  3. использует имитацию текущей даты, например TimeProvider: перфекционистский путь

Я бы пошел на компромисс: я бы добавил текущую дату в качестве параметра в метод isExpired, а isValid метод. Для вашего реального производственного кода добавьте простое переопределение isValid () no-arg, которое вызывает isValid (new Date ()) . Ваш тестовый код использует версию, которая принимает текущую дату в качестве параметра.

1
ответ дан 1 December 2019 в 01:23
поделиться

Обычно я добавляю поставщик даты в проверяемый код. Это также помогает, если вам нужно изменить соглашения или иным образом «исправить» код проверки времени.

5
ответ дан 1 December 2019 в 01:23
поделиться

Используйте внедрение зависимостей и внедрите TimeProvider , который предоставляет метод getExpiryDate () .

2
ответ дан 1 December 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: