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 を動かせることで、できることもいろいろと増えていくので、今回はここまでで良しとする。