2014-02-19 11 views
1

이것은 내 테스트 클래스입니다. 테스트 메소드를 실행하려고하면 예외가 발생합니다.봄 junit 예외

나는 다양한 입력에 대한 테스트를 위해 parmeterized를 사용하고 있습니다. 개미 빌드를 사용하여 maven.not을 사용하고 있지 않습니다.

Exception: 
java.lang.Exception: Test class should have exactly one public zero-argument constructor 
    at org.junit.runners.BlockJUnit4ClassRunner.validateZeroArgConstructor(BlockJUnit4ClassRunner.java:147) 
    at org.junit.runners.BlockJUnit4ClassRunner.validateConstructor(BlockJUnit4ClassRunner.java:124) 
    at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:103) 
    at org.junit.runners.ParentRunner.validate(ParentRunner.java:355) 
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:76) 
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:57) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:104) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29) 
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { 
    "classpath:config/applicationContext-http-int.xml", 
    "classpath:config/web-application-config.xml" }) 

public class TestValidatePolicy extends BaseTest{ 

    @Autowired 
    private Service Service; 

    private String Number; 
    private String Code;  

     @Parameters 
    public static Collection primeNumbers() { 
     return Arrays.asList(new Object[][] { 
     { "8001060001045", "86502" }, 
     { "8001060001039", "85902" }, 

     }); 
    } 

    public TestValidatePolicy(String Number,String Code){ 

    this.Number = Number; 
    this.Code = Code;  
    }  

    @Test  
    public void testValidatePolicyDetails() throws Exception { 

    String xmlValue = getStringFromStream("validatePolicy.xml");   
    Assert.assertEquals(xmlValue, Service.getDetails(Number,Code)); 
    }  
} 

답변

2

테스트 클래스는이 두 개의 인자를 가진 생성자 :

public TestValidatePolicy(String Number,String Code){ 
    ... 
} 

오류 메시지가 (제대로) 말한다 :

Test class should have exactly one public zero-argument constructor 

중 하나 제로를 만들 인수 생성자 :

public TestValidatePolicy() { 
    ... 
} 

... 또는 두 개의 인수로 구성된 생성자를 제거하십시오.

-하지만 매개 변수화 된 jUnit4 테스트를 실행하려고합니다. 이러한 매개 변수가있는 주자 지정하는 @RunWith이 필요합니다

@RunWith(Parameterized.class) 

을 ...하지만 당신은 봄 주자 것으로 교체했습니다

@RunWith(SpringJUnit4ClassRunner.class) 

당신은이 @RunWith 주석을 가질 수 없으며, (내가 아는 한) ParameterizedSpringJUnit4ClassRunner이 없습니다. 그래서 뭐 할까?

나는 here 제안을 발견했다.

사용 :

당신이 봄 주자를 사용할 수 없기 때문에 수동으로 같은 동작 설정해야
@RunWith(Parameterized.class) 

: 나는 제로, 인수 construcotor을 추가하지만이 문제를 해결 타격을받지

@RunWith(Parameterized.class) 
@ContextConfiguration(locations = {"classpath:applicationContext.xml"}) 
public class EmailTest { 

private TestContextManager testContextManager; 

@Before 
public void setUpContext() throws Exception { 
    //this is where the magic happens, we actually do "by hand" what the spring runner would do for us, 
    // read the JavaDoc for the class bellow to know exactly what it does, the method names are quite accurate though 
    this.testContextManager = new TestContextManager(getClass()); 
    this.testContextManager.prepareTestInstance(this); 
} 

@Parameters 
public static Collection<object []> data() { 
    ... 
} 
+0

을 . –

+0

나는 const argcc를 추가했지만 문제를 해결하지 못합니다. 이것은 실제로 매개 변수화 된 junit입니다. 따라서 생성자가 필요합니다. –

+0

Aha; 맞게 업데이트. – slim