Дразнить текущее время с JRE 1.4 - PullRequest
2 голосов
/ 10 марта 2011

В настоящее время я ограничен использованием только JRE 1.4 (среда выполнения Java), и у меня есть класс, который имеет некоторые текущие вычисления времени.Я пытаюсь провести модульное тестирование класса, но это кажется довольно сложным, так как все инструменты, с которыми я сталкивался, требуют аннотаций, которые не поддерживаются JRE1.4.

Я пытался использовать дружественную для JRE 1.4 версиюиз mockito, но это не позволяет мне высмеивать статические классы.У Jmockit есть очень простое решение, которое доступно для загрузки, НО, похоже, нет JRE1.4 дружественной версии Jmockit

. Есть два способа, которыми я мог бы обойти это, если бы использовал JRE1.5 и выше(смоделируйте метод, который вызывает текущее время или просто смоделируйте текущее системное время), но, к сожалению, это не так.

Единственное решение для этого - просто передать текущее системное время в методы с +/ - день / месяц / год.

Тем не менее, я бы хотел сделать это, если возможно, в среде JRE 1.4.

Спасибо

Ответы [ 5 ]

2 голосов
/ 28 августа 2011

Почему бы просто не использовать Java 5 только для тестового кода? При наличии достойной IDE у вас должны быть отдельные модули / проекты для тестового кода (Java 5+) и производственного кода (Java 1.4).

1 голос
/ 24 августа 2011

Помимо решения Жолта (создание обертки), другим возможным является извлечение вызова метода, а затем проверка на подкласс, который переопределяет этот метод.

Код для проверки:

class A{
    protected long now(){
        return System.currentTimeMillis();
    }
}

Модульный тест:

class ATest{
    public void testStuff(){
        // actual test
    }

    class MyA extends A {
        long currentTime;

        protected long now(){
            return currentTime;
        }
    }
}

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

0 голосов
/ 10 марта 2011

easymock не требует аннотаций, поэтому будет работать с 1.4.

0 голосов
/ 10 марта 2011

Или используйте специальный класс для всех связанных со временем методов, например DateHelper. Затем вы можете смоделировать это в своих UnitTests и изменить время с помощью статической переменной.

0 голосов
/ 10 марта 2011

Я предлагаю использовать обертку, когда вы имеете дело со статическими методами.Например, в вашем случае вы можете использовать TimeWrapper:

public class TimeWrapper() {
    public long getCurrentTimeInMillis() {
        return System.currentTimeMillis();
    }
}

Inject TimeWrapper, когда вы должны получить текущее время в других ваших классах.Это решение не зависит от фальшивых фреймворков и jdks.

...