2015-09-11 2 views
0

Как написать Junit для этого?Как написать Junit для классов входного потока

Когда я отладки это, я получаю englishFile, как Null в строке englishFile = new FileInputStream(fileName);

String langCode = getLanguageCode(); 
    String fileName = "appQuestion_"+langCode+".properties"; 
    FileInputStream englishFile = null; 
    try { 
     englishFile = new FileInputStream(fileName); 
     engProperties.load(englishFile); 
    } catch (Exception e) { 

    } finally { 
     if (null != englishFile) { 
      englishFile.close(); 
     } 
    } 
+0

Вам нужно использовать насмешку, чтобы ваш тест не зависел от чтения фактического файла из файловой системы. Для JUnit - Mockito, EasyMock, Powermock и множества других есть много насмешливых фреймворков. – lukelazarovic

+0

Я могу использовать только Mockito, потому что использование других фреймворков будет неэффективным в освещении сонара. Недостатком Mockito является то, что мы не можем издеваться над ** «новым» оператором **. – GreenHeart

+0

Вы проверили http://stackoverflow.com/questions/5920153/test-class-with-a-new-call-in-it-with-mockito? – lukelazarovic

ответ

3

у вас есть варианты по крайней мере 4

  1. использование powermock

    некрасиво, медленно , запрещено во многих компаниях, позволяет писать плохой код, но мощный

  2. сделать интеграционные тесты

    подготовить файлы, переменные окружения и проверить, как ведет себя ваш код, когда такого файла нет. медленно, но позволяет проверить, что код в реальном мире

  3. рефакторинг кода, чтобы соответствовать модульным тестам

    перемещения new к другому классу (заводу), двигаться .load к другому классу (environmentProvider) и высмеивать те классы, в тестах. вы получите быстрые тесты, но вы должны изменить дизайн. некоторые утверждают, что это обеспечит хороший дизайн, некоторые утверждают, что тесты не должны влиять на дизайн.

  4. не проверяйте его.

    Возможно, этот код настолько мал, что у него нет бизнес-логики, не меняется часто, будет проверяться вручную тестерами. так что, возможно, это пустая трата денег, чтобы проверить это. что это легко, но рискованный Раствор

я бы посоветовал вам сделать выбор между некоторым смешением 2,3,4 в зависимости от того, насколько важно этого кода, как часто меняется, это будет более сложным и, что ваше приложение должен делать. тестирование взаимодействия с внешним миром часто связано с дизайном (сложностью, удобочитаемостью и т. д.), скоростью и риском.