2013-05-22 1 views
0

@Parameters를 사용하여 JUnit 클래스에서 객체를 만들 수 없다는 사실을 고려하여 객체를 JUnit 테스트에 전달할 수 있습니까?웹 응용 프로그램의 Junit 테스트에 객체 전달

실제로 웹 응용 프로그램 외부의 서비스에서 객체를 동적으로 만들고 나머지 프로세스 (객체를 사용하는)에 필요한 많은 리소스를 만들기 전에 객체가 유효한지 테스트하고 싶습니다.

편집 :

public void doService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    MyObject myObject = ... //Get Object from external service 

    JUnitCore runner = ... //Create runner 
    runner.run(MyTestCase.class); //throws exception when objet is not valid 

    ...//Create the heavy resources and delegate to custom process 

} 

MyTestCase : 개체가 검증의 형태를 필요로

public class MyTestCase{ 
    @Test 
    public void testValidObject(){ 
     MyObject myObject = ...//How to retrieve MyObject here? 
    } 
} 
+3

일부 코드 공유 – Kowser

+0

내가 원하는 것을 공유했습니다. –

답변

1

어쨌든 당신이 인 myObject를받을 유효성 검사기의 목록을 저장할 수 있습니다. 저장하고 객체의 생성 후 유효성 검사기를 호출 할 필요가

interface IMyObjectValidator { 
    boolean validate(MyObject myObject); 
} 

그리고 당신의 doService 방법 : 당신은 인터페이스 IMyObjectValidator을 필요

public class MyTestCase{ 
    @Test 
    public void testValidObject(){ 
     Service service = new Service(); 
     service.addValidator(new IMyObjectValidator() { 
        boolean validate(MyObject myObject) { 
        // some assertions here 
        return true; 
        } 
       }); 

     service.doService(mockRequest, mockResponse); 

     // some final assertions here 
    } 
} 

: 귀하의 시험은 같을 것입니다. 이것은 실제로 다른 형태로 당신의 목적을 달성 할 수있는 관찰자 패턴입니다.

+0

"Service.doService"를 올바르게 사용하면 "Service.doService"를 의미합니까? MyTestCase는 doService 메소드를 호출하고 doService가 호출하지 않아야 함을 의미합니다. 음, mockRequest와 mockResponse를 만드는 방법을 찾아야합니다 ... 사실, HttpServletRequest를 통해 전달되는 매개 변수가 많은 객체가 만들어지고 (서비스에 전달합니다) 모의 하나는 쉽지 않을 것입니다 ... 연결된 많은 매개 변수가 있습니다 –

+0

예, doServer 대신 doService를 사용했습니다 (변경했습니다). –

+0

일반적으로 프로덕션 코드에는 테스트 코드가 포함되거나 절대로 호출되어서는 안됩니다. mockRequest와 mockResponse를 생성하는 것은 조롱하는 프레임 워크를 사용하는 것만 큼 어렵지는 않지만 문제는 아닙니다 (거기에 많은 도움이 있습니다). 대신 doService에서이 두 매개 변수를 사용하지 않는 메소드를 추출 할 수 있지만 대신 간단하고 읽기 쉽고 테스트 할 수있는 데이터 유형을 사용합니다. 예를 들어, doService는 "firstName"이라는 이름의 요청 매개 변수를 사용하므로 doService가 firstName을 문자열로 가져오고 firstName 매개 변수가있는 메서드를 호출하게합니다. 그런 다음 그 방법을 테스트하십시오. –

관련 문제