技術ネタはQiitaに移りました。壁もどこぞに。

Groovy でテストを書いてみる (IntelliJ IDEA)

いつもは JUnit で済ませてしまうテストを、Groovy で書いてみようと思い、試してみたメモ。

今回使用したのは、IntelliJ IDEA 15 EAP (Early Access Program)。非常に簡単に Groovy サポートが有効になって驚いたが、IntelliJ IDEA は、そもそも Groovy をサポートしているので、むずかしいわけはなかった。

以下手順。

pom.xml に、依存関係を追加

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
    <version>2.4.3</version>
    <scope>test</scope>
</dependency>

以上。

試しにほぼ JUnit まんまのコードで動作を確認してみる。今回は比較のため、もとにした Java のコードも併記しておく。

Java でのテストコード。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {ApplicationContext.class, TestContext.class})
@WebIntegrationTest({"server.port=55555"})
public class SalesResourceTest {
    @Autowired
    private RestTemplate restTemplate;

    @Test
    public void getSalesSummary() throws Exception {
        SalesSummary[] items = restTemplate.getForObject(
                "http://localhost:55555/api/v1/store/{storeId}/sales/summary/{dateFrom}/{dateTo}",
                SalesSummary[].class, new HashMap<String, String>() {
                    {
                        this.put("storeId", "ST2");
                        this.put("dateFrom", "201412");
                        this.put("dateTo", "201506");
                    }
                }
        );

        Assert.assertThat(items, CoreMatchers.any(SalesSummary[].class));
    }
}

こちらが同様の内容を Groovy に直したもの。

@RunWith(SpringJUnit4ClassRunner)
@SpringApplicationConfiguration(classes = [ApplicationContext, TestContext])
@WebIntegrationTest(["server.port=55555"])
class SalesResourceTest {
    @Autowired
    RestTemplate restTemplate;

    @Test
    void getSalesSummary() {
        def items = restTemplate.getForObject(
                "http://localhost:55555/api/v1/store/{storeId}/sales/summary/{dateFrom}/{dateTo}",
                SalesSummary[], [
                        storeId: "ST2",
                        dateFrom: "201412",
                        dateTo: "201506"
                ]
        );

        Assert.assertThat(items, Matchers.any(SalesSummary[]));
    }
}

これだけだと煩雑だった部分がちょっとスッキリした程度で、そこまで強い魅力は感じづらいかもしれない。ただ、Groovy を動かせることで、できることもいろいろと増えていくので、今回はここまでで良しとする。