2015-04-12 5 views
2

меня такая ситуация, что мне нужно, чтобы проверить, где рефакторингом код не представляется возможным (по организационным причинам :().Jmockit- издеваться Private Medhod вернуть сложный объект, а затем использовать его для ожидания()

class ClassToTest { 
    private ComplexObject createComplexObject() throws SomeException{ 
     //create the complex object 
    } 

    public ReturnObject methodToTest(RequestObject reqObj) throws SomeOtherException { 
     ComplexObject complexObj = createComplexObject(); 
     int answer = complexObj.doSomething(); 
     return new ReturnObject(answer); 
    } 

} 

Большинство образцов я вижу, вокруг вызова частных методов и они возвращают строку или Int и т.д. Так что здесь требование немного дополнительно:

  1. Как частный метод и метод для тестирования находятся в том же классе, который необходимо проверить
  2. нужно вызвать частный метод для возвращения макетого внедрения ИТ
  3. Используй это насмешка реализации вернуть окончательный ответ

Пожалуйста консультации по этому вопросу. Все примеры, которые я вижу, до такой степени, чтобы насмехаться с частным методом, чтобы вернуть String/int, тогда как здесь мне нужен сложный объект (который издевается сам), а затем использовать его для возврата окончательного ответа из метода, который находится под контрольная работа.

ответ

0

Вы не хотите издеваться над частным методом (который является только внутренней детализацией реализации), но зависит от ComplexObject. Таким образом:

@Test 
public void exampleTest(@Mocked final ComplexObject anyCmplxObj) throws Exception 
{ 
    new Expectations() {{ anyCmplxObj.doSomething(); result = 123; }}; 
    RequestObject request = new RequestObject(...); 

    ReturnObject ret = new ClassToTest().methodToTest(request); 

    assertEquals(123, ret.getAnswer()); 
} 
+0

Благодарим за отзыв. Я просто заметил, что абстрактный суперкласс ComplexObject имеет пару статических инициализаторов, которые создают ошибки, когда выполняется вызов отражения конструктору ComplexObject, и поэтому тест терпит неудачу. Каким должен быть подход для таких случаев, чтобы переопределить абстрактный экземпляр суперкласса static varialble/blocks? –

+0

спасибо, я понял. –

 Смежные вопросы

  • Нет связанных вопросов^_^