是否可以编写与JAX-RS实现无关的JUnit测试?

时间:2016-03-02 22:13:46

标签: rest junit jax-rs

我使用JAX-RS编写了一个REST Web服务,它对我选择的特定JAX-RS实现一无所知。我碰巧使用TomEE,这意味着我的JAX-RS实现是ApacheCXF。

我想为Web服务编写单元测试,该服务对JAX-RS实现一无所知。这可能吗?到目前为止,我发现的每个示例都涉及使用来自特定JAX-RS实现的类(用于ApacheCXF的JAXRSClientFactory,Jersey测试框架等)。

我已经开始尝试使用tomee-embedded并且能够测试我的EJB,但它似乎并没有启动REST服务。

1 个答案:

答案 0 :(得分:1)

我的解决方案是使用Arquillian与嵌入式TomEE配对。 Arquillian提供了大量功能,但我只是用它来启动/停止嵌入式TomEE。因此,我需要做的就是将其添加到我的pom.xml中:

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/Game">


        <AbsoluteLayout android:layout_height="wrap_content" android:id="@+id/GameField" android:layout_width="fill_parent">
            <Button android:id="@+id/Button00" android:layout_height="100px" android:layout_width="100px" android:layout_x="5px" android:layout_y="5px" android:text="0" android:textSize="48px" android:background="#000"></Button>
            <Button android:id="@+id/Button01" android:layout_height="100px" android:layout_width="100px" android:layout_x="110px" android:layout_y="5px" android:text="D" android:textSize="48px"></Button>
            <Button android:id="@+id/Button02" android:layout_height="100px" android:layout_width="100px" android:layout_x="215px" android:layout_y="5px" android:text="3" android:textSize="48px"></Button>
            <Button android:id="@+id/Button03" android:layout_height="100px" android:layout_width="100px" android:layout_x="5px" android:layout_y="110px" android:text="B" android:textSize="48px"></Button>
            <Button android:id="@+id/Button04" android:layout_height="100px" android:layout_width="100px" android:layout_x="110px" android:layout_y="110px" android:text="6" android:textSize="48px"></Button>
            <Button android:id="@+id/Button05" android:layout_height="100px" android:layout_width="100px" android:layout_x="215px" android:layout_y="110px" android:text="5" android:textSize="48px"></Button>
            <Button android:id="@+id/Button06" android:layout_height="100px" android:layout_width="100px" android:layout_x="5px" android:layout_y="215px" android:text="4" android:textSize="48px"></Button>
            <Button android:id="@+id/Button07" android:layout_height="100px" android:layout_width="100px" android:layout_x="110px" android:layout_y="215px" android:text="1" android:textSize="48px"></Button>
            <Button android:id="@+id/Button08" android:layout_height="100px" android:layout_width="100px" android:layout_x="215px" android:layout_y="215px" android:text="2" android:textSize="48px"></Button>
        </AbsoluteLayout>


    <TextView
        android:layout_below="@+id/GameField"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/MoveText"
        android:textSize="28px"
        android:text="@string/moves_title">

    </TextView>

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_below="@+id/MoveText"
        android:id="@+id/FeedbackTitleText"
        android:text="@string/feedback_title"
        android:textSize="28px">

    </TextView>

    <TextView
        android:layout_below="@+id/GameField"
        android:layout_toRightOf="@+id/MoveText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/MoveCounter"
        android:text="0"
        android:textSize="28px"
        android:layout_marginLeft="5px"
        android:layout_alignBaseline="@+id/MoveText">
    </TextView>

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:textSize="28px"
        android:id="@+id/FeedbackText"
        android:layout_alignRight="@+id/GameField"
        android:layout_below="@+id/FeedbackTitleText"
        android:text="@string/game_feedback_text">
    </TextView>

</RelativeLayout>

然后我可以用一些额外的Arquillian东西和普通的JAX-RS写一个JUnit测试:

<dependency>
    <groupId>org.apache.openejb</groupId>
    <artifactId>arquillian-tomee-embedded</artifactId>
    <version>${tomee.version}</version>
    <scope>test</scope>
</dependency>