2013-01-14 10 views
5

to z oficjalnego tutoriala JMockit:JMockit wielu wyjątków w wyniku za wywołanie metody

@Test 
    public void doSomethingHandlesSomeCheckedException() throws Exception 
    { 
     new Expectations() { 
     DependencyAbc abc; 

     { 
      abc.stringReturningMethod(); 
      returns("str1", "str2"); 
      result = new SomeCheckedException(); 
     } 
     }; 

     new UnitUnderTest().doSomething(); 
    } 

to możliwe, aby stwierdzić coś przeciwnego, że jest wiele wyników i jeden powrotny - muszę rzucać 2 wyjątki i tylko następnie zwróć dobrą wartość. Coś w tym jest to, co Im szukasz:

abc.stringReturningMethod(); 
    returns(new SomeCheckedException(), new SomeOtherException(),"third"); 

ten nie działa, JMockit nie może rzucać te wyjątki String (który jest typem powrotu stringReturningMethod)

Odpowiedz

6

napisać to tak:

abc.stringReturningMethod(); 
    result = new SomeCheckedException(); 
    result = new SomeOtherException(); 
    result = "third"; 
+2

Czy nie ustawi wyniku dla wszystkich trzech połączeń jako "trzeci"? – Queequeg

+0

Nie. Zapisze on trzy kolejne wyniki dla 'stringReturningMethod()'. ("Wynik" to albo wartość do zwrócenia, wyjątek do rzutu, albo "Delegata" do wykonania.) JMockit automatycznie przepisuje te przypisania jako wywołania na wewnętrzne metody, dlatego działa.) –

+0

To nie działa. Musisz zrobić 'result = new SomeCheckedException(); result = new SomeOtherException(); zwraca ("Non-exception-String-value"); ' – searchengine27

1

ja nie wiem, czy jest skrótem, aby to zrobić, ale zawsze można nagrać, że metoda będzie wywoływana wielokrotnie:

abc.stringReturningMethod(); 
result = new SomeCheckedException(); 

abc.stringReturningMethod(); 
result = new SomeOtherException(); 

abc.stringReturningMethod(); 
result = "third"; 
+0

będzie to działać z 'NonStrictExpectations'? – Queequeg

Powiązane problemy