2012-02-02 6 views
1
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"/applicationContext-test.xml"}) 
@Transactional 
public class MyServiceTest { 

    @Resource(name="myService") 
    public MyService myService; 

    @Test 
    public void testSeomthing() { 
    //do some asserts using myService.whatever() 
    } 
} 

그러나 테스트는 내가 마이그레이션하는 데이터를 기반으로하므로 테스트 스위트를 실행할 때마다 관련없는 마이그레이션 코드를 실행하려고합니다. 각 테스트 클래스에서 @Before을 실행하고 싶지 않습니다. 나는 완전한 테스트 과정의 시작에서 그것을 한 번 실행하고 싶습니다. 어디에서 이것을 넣을 수 있습니까?마이그레이션 된 데이터를 기반으로 한 통합 테스트 스프링 서비스 레이어

답변

1

내가 @PostConstruct에서 호출 시작 로직과 어딘가 테스트 빈을 만들 수 조언 것 :

은 분명히이 빈 경우에만 테스트를 위해 작성해야
@Service 
public class TestBean { 

    @PostConstruct 
    public void init() { 
     //startup logic here 
    } 

} 

,이를 달성 할 수있는 가장 쉬운 방법은 src/test/java에 배치하는 것입니다 @Service-annotated classes의 경우 component-scan은 Spring에서 ned로 지정한 패키지입니다.

참고 :@PostConstruct이 트랜잭션에서 실행되고 있지 않음을 기억해야합니다. How to call method on spring proxy once initialised을 참조하십시오.

1

JUnit은 @BeforeClass 주석도 제공합니다.이 주석은 정적 메소드에 배치하여 리소스를 한 번만 초기화 할 수 있습니다.

+0

thankyou하지만 전적으로 이해가되지 않습니다. 나는 정적 메소드를 가질 별도의 클래스를 가질 것이고, 주석을 달 것입니다. 또는 각 테스트 클래스의 정적 메서드? – NimChimpsky

+0

각 테스트 클래스에서 하나의 정적 메서드. @BeforeClass가 상속되는지 확실하지 않습니다. (그 문서를 확인하고 싶을 수도 있습니다) –

+0

그러면 각 테스트 클래스에 대해 실행됩니까? 나는 모든 테스트를 위해 한번 실행하고 싶었습니다 ...? – NimChimpsky

관련 문제