package org.junit.rules; import java.util.List; import org.junit.internal.management.ManagementFactory; import org.junit.internal.management.RuntimeMXBean; import org.junit.runner.Description; import org.junit.runners.model.Statement; /** * The {@code DisableOnDebug} Rule allows you to label certain rules to be * disabled when debugging. *
* The most illustrative use case is for tests that make use of the * {@link Timeout} rule, when ran in debug mode the test may terminate on * timeout abruptly during debugging. Developers may disable the timeout, or * increase the timeout by making a code change on tests that need debugging and * remember revert the change afterwards or rules such as {@link Timeout} that * may be disabled during debugging may be wrapped in a {@code DisableOnDebug}. *
* The important benefit of this feature is that you can disable such rules * without any making any modifications to your test class to remove them during * debugging. *
* This does nothing to tackle timeouts or time sensitive code under test when * debugging and may make this less useful in such circumstances. *
* Example usage: * *
* public static class DisableTimeoutOnDebugSampleTest { * * @Rule * public TestRule timeout = new DisableOnDebug(new Timeout(20)); * * @Test * public void myTest() { * int i = 0; * assertEquals(0, i); // suppose you had a break point here to inspect i * } * } ** * @since 4.12 */ public class DisableOnDebug implements TestRule { private final TestRule rule; private final boolean debugging; /** * Create a {@code DisableOnDebug} instance with the timeout specified in * milliseconds. * * @param rule to disable during debugging */ public DisableOnDebug(TestRule rule) { this(rule, ManagementFactory.getRuntimeMXBean() .getInputArguments()); } /** * Visible for testing purposes only. * * @param rule the rule to disable during debugging * @param inputArguments * arguments provided to the Java runtime */ DisableOnDebug(TestRule rule, List
* Options specified in: *