2009-12-07 4 views
0

У нас есть API, который используется в классе через открытый интерфейс. API предназначен для семейства UNIX и предполагает, что в каждом UNIX есть/bin/sh. Таким образом, при выполнении теста JUnit под win32 мы получаем:junit тестирует класс с функциями сценариев оболочки под win32

Не удается запустить программу «/ бен/ш»

ли это улов-22 ситуация или есть шанс решить эту проблему? Возможно, существует какая-то среда, отличная от junit, которая может быть легко запущена под UNIX. Благодарю.

обновление:

код переносим и предназначен для работы на нескольких операционных системах (Java). Я хочу написать некоторые модульные тесты (это моя собственная инициатива), и части кода подвергаются мне как apis (тестируются в другом отделе). Теперь, когда я запускаю тесты для своего собственного кода, поскольку он зависит от кода apis, он делает некоторую магию позади, например, вызывает сценарии оболочки, которые не существуют под девственным win32 (мы делаем нашу разработку с помощью win32 + ssh).

Переключение на Linux в настоящий момент не является вариантом. Возможно, установка Eclipse на unix + gui через клиент nx может быть вариантом. Надеюсь, он немного разъяснит.

+0

Ах, если я правильно понял, вызовы/bin/sh не находятся в коде, который вы хотите выполнить с помощью unit-test, но в некоторых сторонних API, которые вызывает ваш код. Затем вы можете издеваться над сторонним API, чтобы избежать этих проблем. – sleske

ответ

1

Ваш вопрос непонятен. Очевидно, что если код предназначен для Unix, он не будет работать под Win32, поэтому естественно (и ОК), чтобы модульный тест завершился с ошибкой. Почему вы тестируете код, предназначенный для Unix под Win32?

Если вы не можете проверить под Unix (или переписать код, чтобы быть независимым от платформы), некоторые варианты будут:

  • Refactor код не непосредственно доступа/бен/Ш; то вы можете издеваться над зависимостью, чтобы получить истинный модульный тест, который будет независимым от платформы (обратите внимание, что строго говоря тест, который зависит от внешних ресурсов, таких как/bin/sh, не является единичным тестом, а является интеграционным тестом)
  • install какой-то фиктивный скрипт на Win32, чтобы занять место/bin/sh (и, возможно, сделать путь настраиваемым
  • разделить свой список тестов junit на зависимые от платформы и -зависимые тесты и выполнять только тесты под Win32, которые работают там (и остальные на Unix)

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

+0

спасибо, список действий выглядит солидно. Чтобы уточнить, у меня нет каких-либо функциональных возможностей платформы win32. См. Обновление. –

0

Является ли это ситуацией с уловом-22 или есть возможность ее решить?

Если я могу, если ваш код не означает быть переносным (я не буду обсуждать это), почему вы его создаете в Windows? Возможно, вы могли бы добавить проверку платформы, чтобы избежать вызова API «Unix» при работе в Windows. Или, может быть, вы можете установить cygwin, чтобы сделать sh доступным и в Windows.

Возможно, существует какая-либо инфраструктура, отличная от junit, которая может быть легко запущена под UNIX. Благодарю.

Да? Может быть, я этого не понял, но я понимаю, что у вас есть проблема с кодом, а не с JUnit. Пожалуйста, уточните свои ожидания, если я ошибаюсь.

+0

спасибо за опцию cygwin. Пустой скрипт в PATH sleske звучит также элегантно. OTOH, для правильной бизнес-логики может потребоваться выполнение соответствующего сценария sh (в зависимости от того, насколько глубоко я иду с модульным тестированием). –

+0

, кстати, на моем компьютере win32 установлен cygwin, но как я могу запускать свои модульные тесты через Eclipse? Разве это не так, что я должен запускать их под оболочкой cygwin? –

+0

Я не могу много тестировать, поскольку я не под окнами, но если я хорошо помню, команды cygwin доступны в оболочке Windows (cmd), не так ли? Какую проблему вы испытываете при затмении? –

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