Class ProvideSystemProperty
java.lang.Object
org.junit.rules.ExternalResource
org.junit.contrib.java.lang.system.ProvideSystemProperty
- All Implemented Interfaces:
org.junit.rules.TestRule
public class ProvideSystemProperty
extends org.junit.rules.ExternalResource
The
ProvideSystemProperty rule provides an arbitrary value for a
system property to a test. After the test the original value is restored. You
can ensure that a property is not set by providing null (or using
ClearSystemProperties).
Let's assume the system property MyProperty is not set and the system
property OtherProperty has the value OtherValue. Now run the
test
public void MyTest {
@Rule
public final ProvideSystemProperty provideSystemProperty
= new ProvideSystemProperty("MyProperty", "MyValue")
.and("OtherProperty", null);
@Test
public void overridesProperty() {
assertEquals("MyValue", System.getProperty("MyProperty"));
}
@Test
public void deletesProperty() {
assertNull(System.getProperty("OtherProperty"));
}
}
Both tests succeed and after the tests, the system property
MyProperty is not set and the system property OtherProperty
has the value OtherValue.
You can use a properties file to supply properties for the ProvideSystemProperty rule. The file can be from the file system or the class path. In the first case use
@Rule
public final ProvideSystemProperty properties = ProvideSystemProperty
.fromFile("/home/myself/example.properties");
and in the second case use
@Rule
public final ProvideSystemProperty properties = ProvideSystemProperty
.fromResource("example.properties");
Set property for a single test
If you want to set a property for a single test then you can use
RestoreSystemProperties
along with System.setProperty(String, String).
@Rule
public final TestRule restoreSystemProperties
= new RestoreSystemProperties();
@Test
public void test() {
System.setProperty("YourProperty", "YourValue");
...
}-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidaddProperty(String name, String value) protected voidafter()protected voidbefore()static ProvideSystemPropertyprivate static ProvideSystemPropertystatic ProvideSystemPropertyfromResource(String name) private voidvoidsetProperty(String name, String value) Deprecated.Please useRestoreSystemPropertiesalong withSystem.setProperty(String, String).Methods inherited from class org.junit.rules.ExternalResource
apply
-
Field Details
-
properties
-
restoreSystemProperty
-
-
Constructor Details
-
ProvideSystemProperty
Deprecated. -
ProvideSystemProperty
-
-
Method Details
-
fromFile
-
fromResource
-
fromInputStream
- Throws:
IOException
-
setProperty
Deprecated.Please useRestoreSystemPropertiesalong withSystem.setProperty(String, String).Sets the property with the name to the specified value. After the test the rule restores the value of the property at the point of setting it.This method is deprecated. If you're still using it, please replace your current code
@Rule public final ProvideSystemProperty provideSystemProperty = new ProvideSystemProperty(); @Test public void test() { provideSystemProperty.setProperty("YourProperty", "YourValue"); ... }with this code:@Rule public final TestRule restoreSystemProperties = new RestoreSystemProperties(); @Test public void test() { System.setProperty("YourProperty", "YourValue"); ... }- Parameters:
name- the name of the property.value- the new value of the property.- Since:
- 1.6.0
-
and
-
addProperty
-
before
- Overrides:
beforein classorg.junit.rules.ExternalResource- Throws:
Throwable
-
setProperties
private void setProperties() -
after
protected void after()- Overrides:
afterin classorg.junit.rules.ExternalResource
-
setProperty(String, String).