2016-09-09 9 views
1

Действительно короткий вопрос: Как я могу высмеять response.getContentType()? (Использование PowerMock + TestNG)PowerMock mock external library

  • Я не называю никаких новых() методов.
  • Я пытаюсь высмеять класс, то есть результат выполнения метода другого класса.

Класс испытываемого:

class ClassToBeMocked { 

    public String getJsonPage(String jsonUrl) throws IOException { 
     WebClient webClient = new WebClient(BrowserVersion.CHROME); 

     final Page page = webClient.getPage(jsonUrl); 
     final WebResponse response = page.getWebResponse(); 
     final String cType = response.getContentType(); 

     if (cType.equals("application/json") || cType.equals("application/hal+json")) { 
      return response.getContentAsString(); 
     } 

     throw new IllegalArgumentException("Unexpected response type " + response.getContentType()); 
    } 
} 

сам тест

@PrepareForTest({ WebResponse.class, ClassToBeMocked.class}) 
@PowerMockIgnore("javax.net.ssl.*") 
public class UrlPullerTest extends PowerMockTestCase { 

    @Test 
    public void testGetPage() throws Exception { 
     WebResponse mockwebResposne = PowerMockito.mock(WebResponse.class); 
     PowerMockito.when(mockwebResposne.getContentType()).thenReturn("wrongType"); 

     ClassToBeMocked classToBeMocked = new ClassToBeMocked(); 
     classToBeMocked.getJsonPage("http://google.com"); 
    } 
} 

ответ

1

Вы бы не стал. Ваша проблема в том, что вы создали сложно проверить код, поставив WebClient звоните в ваш исходный код. Это приводит к прямому сочетанию реализаций.

Вы должны использовать инъекции зависимостей вместо (например, чтобы ввести завод, который создает объекты WebClient для вас). Таким образом, вы можете выполнять всю свою работу с безмоментными фреймворками, такими как EasyMock или Mokito.

Подсказка: слишком часто использование PowerMock является показателем того, что ваш дизайн может быть улучшен. Не понимаю, о чем я говорю? Затем смотрите эти videos. Каждый стоит каждую минуту!

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

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