2012-06-20 4 views
0

이 추상 메서드를 이미 내 추상 클래스에서 사용하려면 추상 메서드를 정의하고 싶습니다. 그런 다음이 추상 메서드를 다른 클래스에서 정의하여 내 추상 클래스를 확장하고 싶습니다.다른 매개 변수로 추상 메소드를 대체 하시겠습니까?

하지만 어떻게해야합니까?

(목표는 모든 통합 테스트에 대해 동일한 "구조"를 사용하지만 일부 다른 로직을 구현하는 몇 가지 기본 방법을 제공하는 것입니다.)

추상 클래스의 매개 변수를 사용하여 추상 메소드를 정의하려면 어떻게해야합니까?이 추상 메소드는 이미 추상 클래스에 있지만, 테스트 구현시 먼저 구현해야합니다.

public abstract class BaseIT { 
    protected doVerify(String params..) { 
     if (isValid()) { 
      //basic verification for all extending testcases 
     } 
    } 

    protected abstract boolean isValid(Object o); 
} 


public class TestA_IT extends BaseIT{ 
    @Test 
    public void myTest { 
     //do some specific stuff and verify with resulting params 

     doVerify(params..); 
    } 

    protected boolean isValid(Object o) { 
     return o.isValid(); 
    } 
} 

이것은 내 문제에 대한 (바보 같은) 예입니다. 물론 isValid의 결과를 기본 클래스 메서드에 전달할 수는 있지만이 경우에는 내 특정 경우에 해당되지 않습니다.

문제는 다음과 같습니다. Object o은 다른 테스트 케이스 구현을위한 다른 객체입니다.

인터페이스를 사용할 수 없습니다. 어떻게하면 가능합니까?

+1

나는 명확하게 문제를 이해할 수 없다. 왜 당신은 추상적 인 방법을 대체 할 수 없습니까? – Thihara

+0

개인적으로, 나는 당신이 이것을 복잡하게 생각한다고 생각합니다. 테스트를 간단하게하십시오. – duffymo

+1

실제 사용 사례와 같지 않고 컴파일도되지 않는 (어리석은) 예제를 보여주는 대신 실제 사용 사례가 무엇이고 달성하고자하는 것이 무엇인지 설명하십시오. –

답변

0

당신은 할 수 있습니다.

+0

오케이, 방문객의 패턴은 정말로 멋집니다. 잘 알고 있습니다. 하지만 테스트를 위해 난 주조 instanceOf 주조 템플릿으로 충분하다고 생각합니다. – membersound

0

isValid 메서드는 BaseIT 개체를 받고 TestA_ITBaseIT까지 확장합니다.

public class TestA_IT extends BaseIT { 
    @Test 
    public void myTest { 
     //do some specific stuff and verify with resulting params 

     doVerify(params..); 
    } 

    protected boolean isValid(Object o) { 
     return (o instanceOf YourObject) ? ((YourObject)o).isValid() : false; 
    } 
} 

이 할 수있는 냉각기 방법은 방문자 패턴을 구현하는 것입니다,하지만 난 당신이 같은 괜찮을 것 같아요 :

0

Template method을 정의한 다음 하위 클래스 구현으로 동작을 정의 할 수 있습니다.

0

당신은 그냥 캐스팅 할 수 있습니다

((Class)o).isValid() 

하지만 더 좋은 방법은 인터페이스를 만드는 것입니다 생각하는 방법 isValid()와. 그리고이 모든 객체를 구현하십시오.

0

표시하는 두 클래스에 상속 관계가 없으므로 예제가 혼란 스럽습니다. 이를 명확히 할 때까지 isValid() 메소드를 일반화하거나 isValid() 메소드를 사용하는 인터페이스 유형의 객체를 사용하는 방법을 살펴 보았습니까?

어쨌든 캐스트 또는 instanceof과 관련된 솔루션을 멀리하십시오.

관련 문제