В дополнение к большой части того, что сказали другие плакаты, мне действительно нравится ступать через одну строку за один раз наряду с компьютером, поскольку это вынуждает меня думать об одной строке за один раз. Часто я буду ловить ошибку, даже не смотря на значения переменных просто, потому что я вынужден посмотреть на нее, поскольку я нажимаю кнопку 'следующей строки'. Однако я не думаю, что мой ответ поможет Вам, счету, потому что у Вас, вероятно, уже есть этот навык.
До изучения ресурсов идут, я не использовал никого - я просто исследую все меню и опции.
На самом деле вы можете имитировать или исключить метод System.exit
в тесте JUnit.
Например, используя JMockit вы можете написать (есть и другие способы):
@Test
public void mockSystemExit(@Mocked("exit") System mockSystem)
{
// Called by code under test:
System.exit(); // will not exit the program
}
EDIT: альтернативный тест (с использованием последней версии JMockit API), который не позволяет запускать какой-либо код после вызова System.exit (n)
:
@Test(expected = EOFException.class)
public void checkingForSystemExitWhileNotAllowingCodeToContinueToRun() {
new Expectations(System.class) {{ System.exit(anyInt); result = new EOFException(); }};
// From the code under test:
System.exit(1);
System.out.println("This will never run (and not exit either)");
}
Для ответа VONC запустится на Junit 4, я изменял код следующим образом
protected static class ExitException extends SecurityException {
private static final long serialVersionUID = -1982617086752946683L;
public final int status;
public ExitException(int status) {
super("There is no escape!");
this.status = status;
}
}
private static class NoExitSecurityManager extends SecurityManager {
@Override
public void checkPermission(Permission perm) {
// allow anything.
}
@Override
public void checkPermission(Permission perm, Object context) {
// allow anything.
}
@Override
public void checkExit(int status) {
super.checkExit(status);
throw new ExitException(status);
}
}
private SecurityManager securityManager;
@Before
public void setUp() {
securityManager = System.getSecurityManager();
System.setSecurityManager(new NoExitSecurityManager());
}
@After
public void tearDown() {
System.setSecurityManager(securityManager);
}
Есть среды, в которых возвращаемый код выхода используется вызывающей программой (например, ERRORLEVEL в MS Batch). У нас есть тесты для основных методов, которые делают это в нашем коде, и наш подход заключался в использовании аналогичного переопределения SecurityManager, которое используется в других тестах здесь.
Вчера вечером я собрал небольшой JAR, используя аннотации Junit @Rule, чтобы скрыть код диспетчера безопасности, а также добавить ожидания на основе ожидаемого кода возврата. http://code.google.com/p/junitsystemrules/