2014-10-05 2 views
1

단위 테스트를 위해 JUnit을 사용하고 있습니다. B 클래스 (B 클래스의 메서드)를 테스트하려고한다고 가정 해 봅시다. 주 클래스 (main 메서드 포함) 인 다른 클래스 A이 있고 protected static 필드가 있다고 가정 해 보겠습니다.정적 필드의 JUnit 초기화

이제 B 클래스는 A 클래스의 정적 필드 중 일부를 사용합니다. 따라서 클래스 B을 테스트 할 경우이 정적 필드 인 A은 존재하지 않습니다.

클래스 A을 실행하는 프로그램을 실행하지 않고 클래스 B을 테스트하려면 어떻게해야합니까?

편집 : 분명히해야합니다. 의 우리가 SRC/package1/classA.java에 다음 클래스 A가 있다고 가정하자

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

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

지금 우리가 같은 패키지 SRC/package1/classB.java 다른 클래스 B가 있다고 가정 할 수 있습니다.

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

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

는 지금은 테스트 클래스 B에 대한 테스트/package1/classBTest.java에서 JUnit 테스트를하지만 문제는 필드 1과 FIELD2 초기화되지 않습니다.

클래스 A의 main 메소드를 실행하지 않고 classA.field1과 classA.field2의 두 필드를 수동으로 JUnit에서 초기화 할 수 있습니까?

+0

클래스'A'에 대해서 이야기 할 때 개인 정적 필드를 의미합니까? 클래스가 private 인 경우 JUnit을 사용하든 다른 클래스를 사용하든 관계없이 클래스 B에 액세스 할 수 없습니다. – Bobulous

+0

아니요, 아니요. 클래스 A의 보호 된 정적 필드를 의미합니다. 클래스 A와 클래스 B는 동일한 패키지에 있습니다. – machinery

+1

나는 당신이 우리에게 오류를 throw하는 코드와 던져진 정확한 오류 메시지를 보여줘야 할 것이라고 생각한다. B에서'A'의 정적 필드를 참조하는 데는 문제가 없어야하므로 질문을 편집하고 자세한 정보를 제공해야합니다. – Bobulous

답변

1

classA .i.e의 main 메소드를 호출 할 수 있습니다. ClassA.main (somestrArray) 초기화를 수행해야합니다.

하지만 그렇게하고 싶지 않으면 원래 클래스와 동일한 패키지에서 junit 테스트를 만들 수 있으며 보호 된 변수 .i.e에 액세스 할 수 있습니다. ClassA.field1 = 1; Btw는 동일한 프로젝트에있을 필요는 없지만 패키지 이름은 동일해야합니다.

괜찮 으면,이 시나리오를 허용하도록 ClassA를 리팩터링해야합니다. 초기화 등을하는 메소드가 있습니다.

+0

고맙습니다. 클래스 A에서 정적 필드를 사용하고 ClassA.field1과 같은 클래스 B에서이 필드를 사용하거나 클래스 A에서 정적 필드가 아닌 필드를 사용하고이 필드를 클래스 B의 함수에 인수로 전달하는 것이 좋습니다 (예 : 건설자)? JUnit과 관련하여 프로그래밍 관점에서 볼 때만 의미가 있습니다. – machinery

+0

개인적으로 비 정적 변수를 사용합니다. –