なにか作る

なにかを作るブログです。

Arquillian で JAX-RS のテストを書くときはこんな感じでどうだろう

Arqullian を使っている。

ちょっとずつ書き方がわかってきた気がする。

サンプルコード

@RunWith(Arquillian.class)
@UsingDataSet("dataset.yml")
public class CountryResourceTest {

  @ArquillianResource
  private URL baseUrl;

  private URI countryUri;

  @Before
  public void init() throws Exception {
    countryUri =
        UriBuilder.fromUri(baseUrl.toURI())
            .path(ApplicationConfig.class.getAnnotation(ApplicationPath.class).value())
            .path(CountryResource.class.getAnnotation(Path.class).value()).build();
  }

  @Deployment
  public static WebArchive createDeployment() {
    return ShrinkWrap
        .create(WebArchive.class)
        .addClasses(Country.class, CountryRepository.class, ApplicationConfig.class,
            CountryResource.class)
        .addAsResource("test-persistence.xml", "META-INF/persistence.xml")
        .addAsWebInfResource("test-h2-ds.xml");
  }

  @Test
  @InSequence(1)
  public void setupDatabase() {
    // @RunAsClient でデータベースを初期化するための仮メソッド
  }

  @Test
  @InSequence(2)
  @RunAsClient
  public void test() throws Exception {
    List<Country> list = ClientBuilder.newClient()
        .target(countryUri)
        .request(MediaType.APPLICATION_JSON)
        .get(new GenericType<List<Country>>() {});

    assertThat(list.size(), is(3));
  }

}

こんな感じ