2014-10-05 4 views
1

Я использую JUnit для модульного тестирования. Предположим, я хочу протестировать класс B (методы класса B). Предположим, у нас есть еще один класс A, который является основным классом (содержит метод main) и имеет некоторые поля protected static.JUnit инициализация статических полей

Теперь это класс B использует некоторые из этих статических полей класса A. Поэтому, если я тестирую класс B, эти статические поля класса A не существуют.

Как я могу проверить класс B без выполнения программы (выполняющий класс A)?

Редактировать: Я должен уточнить это. Давайте предположим, что мы имеем следующий класс А в ИПВ/упаковке1/classA.java:

public classA { 
    protected static int field1; 
    protected static int field2; 

    public static void main(String[] args) { 
     // initialize static fields. 
    } 
} 

Теперь давайте предположим, что мы имеем еще один класс B в том же пакете SRC/package1/classB.java.

public ClassB { 
     public ClassB() { 
      // Do some stuff. 
     } 

     public void someMethod() { 
      // Access of static fields from A. 
      classA.field1.... 
      classA.field2.... 
     }   
} 

Теперь у меня есть тест JUnit в тестовом/упаковке1/classBTest.java для тестирования класса В. Но проблема в том, что field1 и field2 не инициализируются.

Как я могу вручную инициализировать в JUnit два поля classA.field1 и classA.field2 без выполнения основного метода класса A?

+0

Вы имеете в виду частные статические поля, когда вы говорите о классе 'A'? Если они являются закрытыми, то классу 'B' не будет разрешено обращаться к ним, используя JUnit или иначе. – Bobulous

+0

Нет, я имею в виду защищенные статические поля в классе A. Класс A и класс B находятся в одном пакете. – machinery

+1

Я думаю, вам нужно будет показать нам код, который выдает ошибку, и точное сообщение об ошибке, которое бросается. Похоже, у вас не должно быть проблем со ссылкой на статические поля в 'A' от' B', поэтому вам нужно отредактировать свой вопрос и предоставить дополнительную информацию. – Bobulous

ответ

1

Вы можете назвать основной метод classA .i.e. ClassA.main (somestrArray), и он должен выполнить инициализацию.

Но если вы не хотите этого делать, вы можете создать свой тест junit в том же пакете, что и исходный класс, и вы сможете получить доступ к защищенным переменным .i.e. ClassA.field1 = 1; и т. д. Кстати, он не должен быть в одном проекте, просто имена пакетов должны быть одинаковыми.

Если это не так, вам нужно будет реорганизовать свой классA, чтобы разрешить этот сценарий .i.e. У меня есть метод, который делает init и т. д.

+0

Спасибо. Лучше ли использовать статические поля в классе A и использовать эти поля в классе B, например ClassA.field1, или лучше использовать нестатические поля в классе A, а затем передать эти поля в качестве аргументов функции в классе B (например, конструктор)? Я просто имею в виду с точки зрения программирования, а не по отношению к JUnit. – machinery

+0

Я бы лично пошел с нестационарными переменными –

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