2016-07-20 2 views
0

Java 및 유닛 테스트를 처음 사용합니다. 나는 테스트 방법 중 하나에 단위 테스트를 작성하는 데 문제가 있습니다. 이걸 좀 도와 주실 래요?동일한 클래스의 다른 메소드를 호출하는 다른 클래스의 다른 메소드에 대한 호출을 포함하는 메소드에 대해 Junit 테스트 케이스를 작성하십시오.

를 ClassA :

Class classA{ 
    /*......*/ 
    classB method1_ClassA(parameters){ 
     /*..... 
     ..... 
     ..... 
     ..... 
     .....*/ 
     String some_Identifier = method2_ClassA(parameters) 

    } 
    private String method2_ClassA(parameters){ 
     /*contains call to the database*/ 
    } 
} 

ClassB가 :

Class classB{ 
    /*.....*/ 
} 

ClassC : 나는 classC에 단위 테스트를 수행하려고

Class classC{ 
    /*.......*/ 
    public classB method1_ClassC(parameters){ 
      classA obj_ClassA = new classA(); 
      return obj_ClassA.method1_classA(parameters); 
    } 
    /*.......*/ 

} 

. ClassC의 메소드 중 하나는 A 클래스의 메소드를 호출합니다.이 메소드는 모의하려고했는데 method1_classA입니다. 그러나이 메서드는 동일한 클래스에있는 다른 메서드를 호출합니다. 누군가가 classC에 대한 단위 테스트를 만드는 방법에 대해 나를 도울 수 있습니까?

+0

쇼를 볼. 진지하게, 시도하고 자신이 테스트를 작성할 수 있습니다. –

+0

테스트 할 클래스에 외부 데이터에 대한 참조를 만드는 메서드가 있으면 mockito.when (class_Name.method_Name()). thenReturn (mockMethod_Name())을 사용할 수있었습니다. 그러나 나는 그것을 여기에서하는 방법을 모른다. 이 문제를 해결하는 방법에 대한 참조를 제공해주십시오. – Random

+0

의견에 정보를 넣지 마십시오. 대신 질문을 업데이트하십시오. 어쨌든 중요한 포인트는 : 만약 당신이 MOCK 방법을 사용했다면, 그 방법이 실제로 무엇을 할 것인지는 중요하지 않습니다. foo()를 조롱하면 "진짜"foo()를 무언가로 대체합니다. 의미 : foo()가 같은 객체 또는 다른 객체의 다른 메소드를 호출하면 ... 그 모두가 관심이 없습니다 ... MOCK을 생성하기 때문입니다. – GhostCat

답변

0

나는 지금 당신의 문제를 얻고 있다고 생각합니다. 문제는 테스트 할 수없는 코드를 생성했다는 것입니다. 그것은 간단합니다 :

class C { 
    public B foo(parameters){ 
    A someA new A(); 
    return someA.someMethod(parameters); 

(참고 :. 나는 예를 들어, 클래스의 이름으로 당신은 "클래스"를 넣지 마십시오 자바 프로그래머를위한 혼란하지 않은 이름을 사용하도록 예를 재)

코드의 문제점은 입니다. 간단히 말하면, 그 호출은 그 메소드에 대해 합리적인 단위 테스트를하는 것을 거의 불가능하게 만듭니다. 여기에 유일한 합리적인 대답은 : 당신이 제공하는 A 객체에 사용할 수있는 "내부"생성자가 : 당신이 거기에 표시되는 내용

class C { 
    private A someA; 

    public C() { this(new A()); } 
    C(A someA) { this.someA = someA; } 

    public B foo(parameters){    
    return someA.someMethod(parameters); 

처럼, 생산 코드를 재 작업 및 의존성 주입을 소개합니다. 이 생성자를 사용하여 A를 C로 조롱합니다. 그리고 갑자기 모든 것을 테스트 할 수 있습니다.

그래서, 긴 이야기를 짧게 :

A) 정말 조언이 코드 변화 에; 그것은 심하게 설계 되었기 때문에 현재로서는 테스트 할 수 없습니다.

b) 실제로 그렇게 할 수없는 경우; Powermock이 여기에서 당신을 도울 수 있는지보기를 원할지도 모르지만 ... 조심하십시오 : 그것은 초보자를위한 도구가 아닙니다. 그것은 많은 수준에서 강력하고 위험합니다. 어떤 경우

, 당신의 쓰기를 가지고있는 코드 this ...

+0

정말 고맙습니다. 고맙습니다. @GhostCat. – Random

관련 문제