Подтвердить что ты не робот

Тестирование Исключения метода с EasyMock

Я новичок в модульном тестировании. Я использую TestNG с MyEclipse для разработки случаев unit test для моего приложения. Во время этого я столкнулся с некоторыми проблемами с EasyMock. Вот мой код (Имя класса, имена методов и типы возвращаемых данных меняются по соображениям безопасности, но вы получите четкое представление о том, чего я пытаюсь достичь здесь).

    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;
       }
    }

Теперь вот мой тест. Теперь то, что я на самом деле хочу достичь в своем тесте Дело в том, что я хочу проверить правильность моей функции (findSomething) выдает исключение в случае возникновения какого-либо исключения. В будущем некоторые другой разработчик может изменить подпись (выбрасывает исключение не действительно часть сигнатуры метода) метода и удалить броски Исключение из моего метода. Итак, как я могу убедиться, что никто не изменяет это?

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

Я получаю исключение

"java.lang.IllegalArgumentException: последний метод, называемый mock, не может вызывать java.lang.Exception"

Что я делаете неправильно здесь? Может кто-то пролить свет на то, как написать тест для моего конкретного сценария?

4b9b3361

Ответ 1

Метод doSomething() соавтора не объявляет, что он может выбросить исключение, и вы говорите, что его макет бросает. Это невозможно.

Исключение - проверенное исключение. Его можно выбросить, только если он объявлен в сигнатуре метода. Если метод не имеет предложения throws, все, что он может сделать, это бросать исключения во время выполнения (т.е. RuntimeException или любой класс потомков).