org.junit.rules

## Class ExternalResource

- java.lang.Object
- - org.junit.rules.ExternalResource

- All Implemented Interfaces:
    TestRule
  Direct Known Subclasses:
    TemporaryFolder

      public abstract class ExternalResource
      extends Object
      implements TestRule

  A base class for Rules (like TemporaryFolder) that set up an external resource before a test (a file, socket, server, database connection, etc.), and guarantee to tear it down afterward:

       public static class UsesExternalResource {
        Server myServer= new Server();

        @Rule
        public ExternalResource resource= new ExternalResource() {
            @Override
            protected void before() throws Throwable {
                myServer.connect();
               };

            @Override
            protected void after() {
                myServer.disconnect();
               };
           };

        @Test
        public void testFoo() {
            new Client().run(myServer);
           }
       }

  Since:
    4.7

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `ExternalResource()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `after()` Override to tear down your specific external resource.
    `Statement` | `apply(Statement base, Description description)` Modifies the method-running `Statement` to implement this test-running rule.
    `protected void` | `before()` Override to set up your specific external resource.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ExternalResource

          public ExternalResource()

  - ### Method Detail

    - #### apply

          public Statement apply(Statement base,
                        Description description)

      Description copied from interface: `TestRule`
      Modifies the method-running `Statement` to implement this test-running rule.
      Specified by:
        `apply` in interface `TestRule`
      Parameters:
        `base` - The `Statement` to be modified
        `description` - A `Description` of the test implemented in `base`
      Returns:
        a new statement, which may be the same as `base`, a wrapper around `base`, or a completely new Statement.

    - #### before

          protected void before()
                         throws Throwable

      Override to set up your specific external resource.
      Throws:
        `if` - setup fails (which will disable `after`
        `Throwable`

    - #### after

          protected void after()

      Override to tear down your specific external resource.