2016-12-21 5 views
2

Я хочу выполнить некоторые модульные тесты по сценарию, используя JUnit 4's JUnitCore. Сценарий довольно прост:Есть ли способ отключить вывод stdout org.junit.runner.JUnitCore?

java -cp "bin:lib/*" org.junit.runner.JUnitCore my.Tests 

«Проблема» в том, что я хотел бы, чтобы обработать вывод моих тестов (на стандартный вывод и стандартный поток ошибок), а сам бегун добавляет вывод в стандартный вывод (как один «.» (точка) после каждого теста).

Есть ли способ предотвратить выход бегуна (т. Е. Тихий выход по умолчанию JUnitCore)? Фильтрация этих точек раздражает.

+1

Как указано в задании, есть уже сформированный результат, который необходимо обработать. Так что подавление всего не будет полезно, я думаю !? – loonytune

+0

@ Inian: loonytune прав, у меня есть выход, который я хочу обработать. Я просто хочу, чтобы выход по умолчанию был отключен. –

+1

@MarkusWeninger: немного манипуляции 'bash' с чем-то вроде' java -cp 'bin: lib/* "org.junit.runner.JUnitCore my.Tests | при чтении строки; do echo "$ {line //./} "; done' – Inian

ответ

1

Глядя на JUnitCore, вы можете написать свой собственный главный-обертку, которая просто использует другой JUnitSystem и вызывает runMain из JUnitCore и т.д .:

Result result = new JUnitCore().runMain(new NoopPrintStreamSystem(), args); 
System.exit(result.wasSuccessful() ? 0 : 1); 

Вы можете реализовать NoopPrintStreamSystem в зависимости от ваших потребностей, например с PrintStream ничего не делая.

1

В дополнение к ответу Роланда я предоставлю свое мнение. Во-первых - я не думаю, что вы должны использовать System.out/System.err в своем коде, даже в Unit Tests. Я подниму две основных причины (более релевантных для испытаний):

  • Производительность (система регистрации подключена и настроена правильно будет сделать юнит-тесты значительно быстрее работают)

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

Например, вы можете использовать SLF4J системы- использовать модуль апи в тестах (только интерфейсы классов регистратора) и 2 соответствующие обязательные:

  • простой привязки (перенаправление к файлам)
  • НЕТ -op binding - ничего не печатать

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

Теперь, если вы абсолютно необходимо перенаправить System.out и System.err в другое место (скажем, файл) есть старая техника:

System.setOut(new PrintStream(new WhatEverOutputStreamYouWant())); 
System.setErr(__Just__the__same__as__above__) 

Вы можете написать некоторые JUnit Правило, которое будет вызываться для каждого TestCase и вы будете установлены.

Надеюсь, что это поможет

+0

Спасибо за ответ. К сожалению, мне нужно написать в stdout/stderr, потому что вывод скрипта читается другим инструментом и этот инструмент зависит от вывода stdout/stderr скрипта. В противном случае я бы использовал конкретную систему регистрации. :) –

+0

Или, в этом случае, вы, вероятно, захотите использовать систему регистрации бетона. Просто назначьте 2 разных приложения для одного и того же регистратора, чтобы записать в stdout/stderr, а другой будет файловым приложением, которое будет создавать файлы. После этого вы сможете обработать их в своем проекте. Помогает ли это? –

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