2013-09-18 4 views
0

Я пытаюсь добавить некоторые функции в устаревшие библиотеки и планирую сделать их выполнимыми.Как проверить метод, выполняемый в тестовом контексте?

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

Я использую junit4 для проверки моего проекта, любых предложений для этого?

class Foo { 
    public void methodA() { 
     // is it possible limit methodA only allowed invoked by JUNIT ? 
    } 
} 
+1

Название, кажется, не связано с телом вашего вопроса, пожалуйста, уточните. – alfasin

+0

«Я хочу ограничить некоторые методы разрешенным вызовом в контексте тестирования» - также не очень ясно – alfasin

+3

Я предполагаю, что если у вас есть некоторые «опасные» методы, которые следует использовать только в тестах, а не на производстве, тогда помещайте их в классы, которые вы затем поместите в свою папку src/test (если вы используете maven) или исключаете их из упаковки в производственный код. То, чего нет, не может повредить. – Matthias

ответ

1

Я бы окурок

Lib l = new Lib() { 
     @Override 
     void xxx() { 
      Assert.fail("calling xxx() is not allowed"); 
     } 
    }; 
+0

Это выглядит хорошо и заставило меня попробовать отражение пакетов junit – qrtt1

1

Дело приходит в мой ум, чтобы использовать зависимость инъекций использовать два различных реализаций одного и того же интерфейса, один для производства и один для тестирования. Тот, который вы вводите в производственный процесс, может иметь только пустой метод, который на самом деле ничего не делает. Концепция:

class Foo { 

    private Bar bar; 

    public Foo() { 

     bar = new DefultBarImplementation(); 
    } 


    public setBar(Bar bar) { 

     this.bar = bar; 
    } 

    //use bar in your other methods 
} 

В тесты

Foo foo = new Foo(); 
foo.setBar(new TestBarImplementation()); 
+0

Спасибо за ваш ответ. Я знаю, что лучше использовать другую реализацию. Однако в моем устаревшем проекте есть много непроверенных одноэлементных моделей. Может быть, пришло время их исправить .... – qrtt1

0

Вы можете сделать методы пакет-частные и имеют испытания в одном пакете.

public class Foo{ 

    public void publicMethod(); 

    void forTestingOnly(); 

} 
Смежные вопросы