2013-05-15 4 views
4

메서드 중 하나가 공동 작업자 클래스의 인스턴스를 반환하는 클래스를 단위 테스트하려고합니다. 인수의 값에 따라 새로 생성 된 인스턴스 또는 저장된, 이전에 생성 된 인스턴스.jmockit 조롱 된 생성자가 예상 값을 반환하지 않습니다.

나는 Expectations에서 생성자 호출을 조롱하고 결과를 공동 작업자의 조롱 된 인스턴스 값으로 설정합니다. 그러나 새 인스턴스를 만드는 매개 변수 값을 사용하여 메서드를 테스트하면 조롱 된 생성자 및 메서드가 예상 값을 반환하지 않습니다.

나는 다음이를 단순화 :

package com.mfluent; 
import junit.framework.TestCase; 
import mockit.Expectations; 
import mockit.Mocked; 
import mockit.Tested; 
import org.junit.Assert; 
import org.junit.Test; 

public class ConstructorTest extends TestCase { 

    static class Collaborator { 
    } 

    static class ClassUnderTest { 
     Collaborator getCollaborator() { 
      return new Collaborator(); 
     } 
    } 

    @Tested 
    ClassUnderTest classUnderTest; 

    @Mocked 
    Collaborator collaborator; 

    @Test 
    public void test() { 
     new Expectations() { 
      { 
       new Collaborator(); 
       result = ConstructorTest.this.collaborator; 
      } 
     }; 

     Collaborator collaborator = this.classUnderTest.getCollaborator(); 
     Assert.assertTrue("incorrect collaborator returned", collaborator == this.collaborator); 
    } 
} 

이 테스트에 실패하고 크게 감사 BR 것 작동하는 방법에 이유가 뭘까요. 사전에

감사합니다,

짐 Renkel는 수석 기술 직원 는 mFluent, 주식 LLC는

답변

1

변경과 같은 @Capturing@Mocked 주석 :

@Capturing 
Collaborator collaborator; 

이에 테스트를 할 수 있습니다 나를 위해서.

이것은 약간의 부두 마술이지만 내 의견으로는 더 자세히 읽고 싶다면 Capturing internal instances of mocked types을 JMockit 자습서에서 살펴보십시오.

또한 Using JMockit to return actual instance from mocked constructor

+0

이 도와 주셔서 너무 감사 표시! 실제 테스트 케이스에 수정 사항을 적용했지만 여전히 작동하지 않았습니다. 그러나 더 많은 파기와 실험을 한 후에, 나는 그것을 작동시킬 수있었습니다. 문제는 여러 구성을 캡처해야했기 때문에 각 캡처 필드가 maxInstances = 1 특성을 갖도록해야했습니다. 분명하지 않지만 내가 말했던 것처럼 작동합니다. 다시 한 번 도움을 주셔서 감사합니다. 짐 렌켈 수석 기술 직원 mFluent, Inc. LLC –

+0

위대한, 다행 당신을 위해 일했다. 그리고 StackOverflow에 오신 것을 환영합니다! –

+0

대신'@Mocked Collaborator mock'을 사용하십시오. 그것은 현재와 미래의 모든 * 예를 모의 할 것입니다. 일반적으로 'Collaborator'객체에서 예상되는 동작을 지정해야합니다. 동일한 조롱 된 클래스의 다른 인스턴스와 다른 동작이 필요하지 않으면 인스턴스에 대해 걱정할 필요가 없습니다. –

관련 문제