Class ClearSystemProperties

java.lang.Object
org.junit.rules.ExternalResource
org.junit.contrib.java.lang.system.ClearSystemProperties
All Implemented Interfaces:
org.junit.rules.TestRule

public class ClearSystemProperties extends org.junit.rules.ExternalResource
The ClearSystemProperties rule clears a set of system properties when the test starts and restores their original values when the test finishes (whether it passes or fails).

Supposing that the system property YourProperty has the value YourValue. Now run the test

public void YourTest {
  @Rule
  public final TestRule clearSystemProperties
    = new ClearSystemProperties("YourProperty");

  @Test
  public void verifyProperty() {
    assertNull(System.getProperty("YourProperty"));
  }
}
The test succeeds and afterwards the system property YourProperty has the value YourValue again.

The ClearSystemProperties rule accepts a list of properties in case you need to clear multiple properties:

@Rule
public final TestRule clearSystemProperties
  = new ClearSystemProperties("first", "second", "third");

Clear property for a single test

If you want to clear a property for a single test then you can use RestoreSystemProperties along with System.clearProperty(String).

@Rule
public final TestRule restoreSystemProperties
  = new RestoreSystemProperties();

@Test
public void test() {
  System.clearProperty("YourProperty");
  ...
}
  • Field Details

  • Constructor Details

    • ClearSystemProperties

      public ClearSystemProperties(String... properties)
      Creates a ClearSystemProperties rule that clears the specified properties and restores their original values when the test finishes (whether it passes or fails).
      Parameters:
      properties - the properties' names.
  • Method Details

    • clearProperty

      @Deprecated public void clearProperty(String property)
      Deprecated.
      Clears the property and restores the value of the property at the point of clearing it.

      This method is deprecated. If you're still using it, please replace your current code

      @Rule
      public final ClearSystemProperties clearSystemProperties = new ClearSystemProperties();
      
      @Test
      public void test() {
        clearSystemProperties.clearProperty("YourProperty");
        ...
      }
      with this code:
      @Rule
      public final TestRule restoreSystemProperties = new RestoreSystemProperties();
      
      @Test
      public void test() {
        System.clearProperty("YourProperty");
        ...
      }
      Parameters:
      property - the name of the property.
      Since:
      1.6.0
    • before

      protected void before() throws Throwable
      Overrides:
      before in class org.junit.rules.ExternalResource
      Throws:
      Throwable
    • after

      protected void after()
      Overrides:
      after in class org.junit.rules.ExternalResource
    • clearProperties

      private void clearProperties()
    • restoreOriginalValue

      private void restoreOriginalValue()