LoginSignup
2
2

More than 5 years have passed since last update.

JUnitの各Ruleの使い方メモ

Posted at

Ruleとは

TestRuleまたはTestRuleを継承したクラスのインスタンスを
@Ruleアノテーションをつけてテストクラスのフィールドにセットすることで
テストに様々な機能を追加することが可能となる。

構成

$ tree
.
├── build.gradle
└── src
    └── test
        └── java
            └── example
                ├── TestTemporaryFolder.java
                └── TestTestName.java
$ cat build.gradle
apply plugin: "java"

repositories {
  mavenCentral()
}

dependencies {
  testCompile "junit:junit:4.+"
}

test {
  testLogging.showStandardStreams = true
}

TestName

TestTestName.java
package example;

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
import org.junit.runner.Description;

import static org.junit.Assert.assertEquals;

public class TestTestName
{
    @Rule
    public TestName testName = new TestName()
    {
        @Override
        public void starting(Description d)
        {
            System.out.println(
                String.format("%s starting ...", d.getMethodName()));
            super.starting(d);
        }
    };

    @Test
    public void testMethodA()
    {
        System.out.println(
            String.format("%s running ...", testName.getMethodName()));
        assertEquals("testMethodA", testName.getMethodName());
    }

    @Test
    public void testMethodB()
    {
        System.out.println(
            String.format("%s running ...", testName.getMethodName()));
        assertEquals("testMethodB", testName.getMethodName());
    }
}
$ gradle -Dtest.single=TestTestName test

> Task :test

example.TestTestName > testMethodA STANDARD_OUT
    testMethodA starting ...
    testMethodA running ...

example.TestTestName > testMethodB STANDARD_OUT
    testMethodB starting ...
    testMethodB running ...


BUILD SUCCESSFUL in 1s
2 actionable tasks: 1 executed, 1 up-to-date

TemporaryFolder

TestTemporaryFolder.java
package example;

import java.io.File;
import java.io.IOException;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;

import static org.junit.Assert.assertTrue;

public class TestTemporaryFolder
{
    File tempFile = null;

    @Rule
    public TemporaryFolder tempFolder = new TemporaryFolder()
    {
        @Override
        protected void before() throws Throwable
        {
            System.out.println("TemporaryFolder.before running ...");
            super.before();
        }

        @Override
        protected void after()
        {
            System.out.println("TemporaryFolder.after running ...");
            super.delete();
        }
    };

    @Before
    public void before() throws IOException
    {
        System.out.println("TestTemporaryFolder.before running ...");
        tempFile = tempFolder.newFile();
    }

    @After
    public void after()
    {
        System.out.println("TestTemporaryFolder.after running ...");
    }

    @Test
    public void testMethodA()
    {
        System.out.println("testMethodA running ...");
        System.out.println(String.format("tempFile name: %s", tempFile.getName()));
        assertTrue(tempFile.exists());
    }

    @Test
    public void testMethodB()
    {
        System.out.println("testMethodA running ...");
        System.out.println(String.format("tempFile name: %s", tempFile.getName()));
        assertTrue(tempFile.exists());
    }
}
$ gradle -Dtest.single=TestTemporaryFolder test

> Task :test

example.TestTemporaryFolder > testMethodA STANDARD_OUT
    TemporaryFolder.before running ...
    TestTemporaryFolder.before running ...
    testMethodA running ...
    tempFile name: junit2803814005363359855.tmp
    TestTemporaryFolder.after running ...
    TemporaryFolder.after running ...

example.TestTemporaryFolder > testMethodB STANDARD_OUT
    TemporaryFolder.before running ...
    TestTemporaryFolder.before running ...
    testMethodA running ...
    tempFile name: junit23544542917867853.tmp
    TestTemporaryFolder.after running ...
    TemporaryFolder.after running ...


BUILD SUCCESSFUL in 2s
2 actionable tasks: 1 executed, 1 up-to-date
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2