2015-02-05 1 views
0

나는 JMockIt 1.8를 사용하고, 나는 다음과 같은 클래스가 다음 테스트 클래스와MissingInvocation

public class SimpleUser { 
    public static void useSimple(final SimpleClass simple) { 
     System.out.println("useSimple called"); 
    } 

    public void createAndUse() { 
     final SimpleClass simple = new SimpleClass(); 
     simple.method(); 
     SimpleUser.useSimple(simple); 
    } 
} 

public class SimpleClass { 
    public void method() { 
    } 
} 

을 :

public class Tester { 
    @Mocked SimpleClass simple; 

    @Test 
    public void test() { 
     new Expectations(SimpleUser.class) { 
      { 
       new SimpleClass(); 

       simple.method(); 

       SimpleUser.useSimple(simple); 
      } 
     }; 

     SimpleUser user = new SimpleUser(); 
     user.createAndUse(); 
    } 
} 

그리고이 테스트가 통과합니다. 내가 SimpleUser에서 simple.method()에 대한 호출과 Testersimple.method()에 대한 기대, 테스트 오류를 ​​제거 할 때

그러나 :

mockit.internal.MissingInvocation: Missing invocation of 
    SimpleUser#useSimple(SimpleClass simple) 
    with arguments: [email protected] 

를 나는 기대를 변경하여 전달하는 테스트의 수정 된 버전을 일으킬 수 있습니다 SimpleUser.useSimple(simple)에서 SimpleUser.useSimple((SimpleClass) any)으로 변경되었지만 전달되는 인스턴스가 올바른 것으로 주장하고 싶습니다.


은 왜 여부 method()에 따라 행동 변화라고 않고 는 어떻게 SimpleUser.useSimple()SimpleClass 내에서 메소드를 호출에 의지하지 않고, createAndUse()에서 만든 SimpleClass 호출되는 것을 보장 할 수 있습니다. 테스트가 실패 simple.method()은 다음과 같습니다

+1

이 당신의 기대에 오타가 ...

public class Tester { @Mocked SimpleClass simple; @Test public void test() { new Expectations(SimpleUser.class) { { new SimpleClass(); result = simple; // <- here simple.method(); SimpleUser.useSimple(simple); } }; SimpleUser user = new SimpleUser(); user.createAndUse(); } } 

희망이 도움말 :

그러나 기대 블록에 줄을 추가하여 당신이 원하는 것을 테스트 할 수 있습니다 (JMockit 1.14 테스트) - 'SimpleUser.useVisitor (simple);'입니까? – vikingsteve

+0

감사합니다. 코드를 MCV 예제로 줄이면 오타가 발생했습니다 –

+0

새로운 'SimpleClass' 인스턴스가 만들어 졌는지 확인해야합니까? 지나치게 구체적으로 검사하는 것처럼 보입니다. 나는 간단하게 메서드가 null이 아닌 인자 인 SimpleUser.useSimple ((SimpleClass) withNotNull())과 함께 호출되었는지 확인한다. –

답변

1

나는

가 는하지만 JMockit 1.14 항상 동일 행동으로 () 메소드가 호출되는지 여부에 따라 행동 변화

않는 이유를 설명 할 수 없다 불렀다.

+0

감사합니다. 안타깝게도 JMockit 1.8에서 작동하지 않는 것 같습니다. 그래서이 대답을 받아 들일 수 없습니다. –