2012-01-27 4 views
2

JUnit 4.8.1 (및 Maven 3.0.3)에서 Java 6를 사용하고 있습니다. 특정 JUnit 테스트의 경우, 일부 테스트가 의존하는 클래스 (com.myco.clearing.product.server.cache로 규정 됨)를이 클래스의 자체 버전 (동일한 공용 메소드 서명이 있음)으로 대체하려고합니다. . 이것을하는 우아한 방법은 무엇입니까?일부 JUnit 테스트를 실행할 때 특정 클래스를 바꾸려면 어떻게합니까?

일부 JUnit 테스트는 com.myco.clearing.product.server.cache.Cache 클래스를 직접 호출하지 않고이 클래스에 의존하는 클래스를 호출한다는 점에 유의하십시오. 이러한 간접적 인 경우에도 클래스의 버전이 사용되기를 바랍니다. 이 라인을 따라 어떤 도움

감사합니다, - 데이브

+0

잠깐, _tests_ 캐시에 의존하십니까? 또는 테스트중인 유닛이 캐시에 의존하는 유닛입니까? (나는 캐시가 단지 예일 뿐이라는 것을 알고있다) –

답변

2

이 말을하기 어렵다 여기가 무엇을해야 하는지를 정확히하지만, 일반적으로 :

  1. 사용하는 일부 IOC의 기술 - 생성자, 세터 주입.

  2. 모의 프레임 워크를 사용하여 개체를 조롱하면 모치토가 좋습니다.

따라서, 예를 들어, 당신은 할 수 com.myco.clearing.product.server.cache.Cache 사용하는 클래스가있는 경우의는 Foo를 호출합니다. 그리고 당신은 다음과 같이 현재 사용

class Foo { 
private Cache _cache = new Cache(...); 
} 

가능한 경우는, 이런 식으로 변경 :

class Foo { 
    private Cache _cache; 

    public Foo(Cache cache) { 
     _cache = cache; 
    } 

    public Foo() { 
     this(new Cache()); 
    } 
} 

그런 다음 당신은 Cache 클래스의 조롱 버전에 삽입 할 수 있습니다. 나는 Cache 클래스에 따라 "수 있습니다"라고 말합니다. 그것이 최종적인 것이라면, 정적 메서드 등이 많이 있습니다. 그러면 처리해야 할 것이 더 있습니다.

관련 문제