Как заменить определенный класс при запуске некоторых тестов JUnit? - PullRequest
2 голосов
/ 28 января 2012

Я использую Java 6 с JUnit 4.8.1 (и Maven 3.0.3). Для некоторых тестов JUnit я хочу заменить класс, от которого зависят некоторые тесты (квалифицируется как com.myco.clearing.product.server.cache), на мою собственную версию этого класса (с такими же сигнатурами открытых методов) , Что такое элегантный способ сделать это?

Обратите внимание, что некоторые тесты JUnit не вызывают класс com.myco.clearing.product.server.cache.Cache напрямую, а вызывают классы, которые полагаются на этот класс. Даже в этих косвенных случаях я хочу, чтобы использовалась моя версия класса.

Спасибо за любую помощь в этом направлении, - Дэйв

1 Ответ

2 голосов
/ 28 января 2012

Трудно сказать точно что здесь делать, но в целом:

  1. Используйте некоторые методы IoC - конструктор, инъекция сеттера.

  2. Используйте насмешливые рамки, чтобы высмеивать ваши объекты, я бы порекомендовал Mockito.

Так, например, если у вас есть класс, который использует com.myco.clearing.product.server.cache.Cache, давайте назовем его Foo. И вы используете сейчас, как это:

class Foo {
 private Cache _cache = new Cache( ... );
}

Если возможно, замените его следующим образом:

class Foo {
    private Cache _cache;

    public Foo( Cache cache ) {
      _cache = cache;
    }

    public Foo() {
      this( new Cache() );
    }
}

Тогда вы сможете использовать инъекцию в версии Cache. Я говорю «может быть в состоянии», поскольку это зависит от класса Cache. Если он окончательный, имеет кучу статических методов и т. Д., То вам нужно иметь дело с другими.

...