2012-09-19 16 views
10

Jestem początkującym w testowaniu jednostkowym. Używam TestNG z MyEclipse do opracowania przypadków testowych jednostkowych dla mojej aplikacji. Robiąc to mam problemy z EasyMock. Oto mój kod (nazwa klasy, nazwy metod i typy zwrotu zostały zmienione ze względów bezpieczeństwa, ale otrzymasz jasny obraz tego, co próbuję tutaj osiągnąć).Testowanie Wyjątki metody z EasyMockiem

public MyClass 
    { 
     // This is a method in my class which calls a collaborator which I 
     // want to mock in my test case 
     public SomeObject findSomething(SomeOtherObject param) throws Exception 
     { 
      SomeOtherObject param a = myCollaborator.doSomething(param); 
      // Do something with the object and then return it 
      return a; 
     } 
    } 

Oto mój test. Teraz, co faktycznie chcę osiągnąć w moim teście przypadku jest to, że chcę sprawdzić, czy moja funkcja (findSomething) właściwie zgłasza wyjątek w przypadku, gdy zgłoszony zostanie wyjątek. W przyszłości jakiś inny programista może zmienić podpis (wyrzuca wyjątek nie jest naprawdę częścią sygnatury metody) metody i usunąć wyrzucenia. Wyjątek od mojej metody. Jak mogę się upewnić, że nikt nie zmieni tego?

@Test(dataProvider="mydataProvider", expectedExceptions=Exception.class) 
public void MyTest(SomeOtherObject param) throws Exception { 
{ 
    EasyMock.expect(myCollaboratorMock.doSomething(param)).andThrow(new Exception()); 
    EasyMock.replay(myCollaboratorMock); 
} 

jestem coraz wyjątkiem

"java.lang.IllegalArgumentException: ostatni metody nazywanej na mock nie może rzucać java.lang.Exception"

Co Jestem robi źle tutaj? Czy ktoś może rzucić trochę światła na to, jak napisać test na konkretny scenariusz?

Odpowiedz

18

Metoda współpracownika pod nr doSomething() nie deklaruje, że może wyrzucać wyjątek, a Ty mówisz o tym, że możesz ją wyrzucić. To nie jest możliwe.

Wyjątek jest sprawdzanym wyjątkiem. Można go rzucić tylko wtedy, gdy jest zadeklarowany w metodzie podpisu. Jeśli metoda nie zawiera klauzuli throws, może jedynie rzucić wyjątki środowiska wykonawczego (tj. RuntimeException lub inną klasę potomków).

+0

Fałsz. Używając [ogólnych dziwactw] (http://java.dzone.com/articles/throwing-undeclared-checked) możliwe jest rzucanie sprawdzanych wyjątków z praktycznie dowolnego miejsca. – jontejj