OK、GlassFish インフラストラクチャーが機能するようになり、単純なサーブレットと単純な JAX-RS サービスのテストを正常に作成できました。これを理解するのにいくらかの検索が必要だったので、他の人が使用できる場合に備えてここで共有します. JPA のテストについてはまだ掘り下げていませんが、一度に 1 つずつ説明します。私は StackOverflow を初めて使用するので、回答で多くのコードを共有するために受け入れられているプロトコルはわかりませんが、次のようになります: シンプルなサーブレットと JAX-RS リソースを提供する GlassFish 埋め込みインスタンスを起動する方法、次にそれらをテストします。パッケージは省略。埋め込み Javadoc: http://embedded-glassfish.java.net/nonav/apidocs/
1. JAX-RS を構成します。
package org.netbeans.rest.application.config;
@javax.ws.rs.ApplicationPath("resources")
public class ApplicationConfig extends javax.ws.rs.core.Application {
}
2. リソースを定義し
ます。
@Path("generic")
public class GenericResource {
public static final String MESSAGE = "hi there";
public GenericResource() {
}
@GET @Produces(MediaType.TEXT_PLAIN)
public String sayHi() {
return MESSAGE;
}
}
3. サーブレットを定義します。
package servlet;
@WebServlet(urlPatterns = {"/hello"})
public class HelloWebServlet extends HttpServlet {
public HelloWebServlet() {
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
PrintWriter pw = res.getWriter();
try {
pw.println(GenericResource.MESSAGE);
} catch (Exception ex) {
e.printStackTrace();
}
}
}
4. Jersey REST クライアント、JUnit 4、http: //download.java.net/maven/glassfish/org/glassfish/extras/glassfish-embedded-all/3.1.1/glassfish-embedded-all を使用して、テストを定義します。 -3.1.1.jar
package rest;
public class NewServletTest {
private static final Logger LOG = Logger.getLogger(NewServletTest.class.getCanonicalName());
private static GlassFish glassfish = null;
private static final String WEB_APP_NAME = "RestTemp";
private static final String BASE_URI = "http://localhost:" + 8080 + "/" + WEB_APP_NAME;
private static final String REST_URI = BASE_URI + "/" + "resources" + "/" + "generic";
public NewServletTest() {
}
@BeforeClass
public static void startServer() {
try {
GlassFishProperties gfProps = new GlassFishProperties();
gfProps.setPort("http-listener", 8080); // NB: not sure where name comes from - a standard property?
glassfish = GlassFishRuntime.bootstrap().newGlassFish(gfProps);
glassfish.start();
Deployer deployer = glassfish.getDeployer();
ScatteredArchive archive = new ScatteredArchive(WEB_APP_NAME, ScatteredArchive.Type.WAR);
File buildDir = new File("build", "classes"); // NB: location depends on IDE setup
archive.addClassPath(buildDir);
deployer.deploy(archive.toURI());
} catch (GlassFishException ex) {
LOG.log(Level.SEVERE, null, ex);
} catch (IOException ex) {
LOG.log(Level.SEVERE, null, ex);
}
}
@AfterClass
public static void shutDownServer() {
if (glassfish != null) {
try {
glassfish.stop();
glassfish.dispose();
glassfish = null;
} catch (GlassFishException ex) {
LOG.log(Level.SEVERE, "tearDownClass(): exception: ", ex);
}
}
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
@Test
public void testPing() throws MalformedURLException, IOException {
URL url = new URL(BASE_URI + "/hello");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.connect();
InputStream inputStream = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
assertEquals(GenericResource.MESSAGE, br.readLine());
}
@Test
public void testGet() {
WebResource r = Client.create().resource(REST_URI);
ClientResponse cr = r.accept(MediaType.TEXT_PLAIN).get(ClientResponse.class); // GET
String crEntityStr = cr.getEntity(String.class);
ClientResponse.Status crStatus = cr.getClientResponseStatus();
assertEquals(GenericResource.MESSAGE, crEntityStr);
assertEquals(ClientResponse.Status.OK, crStatus);
}
}
このプロジェクトを NetBeans で作成するには:
- [新しいプロジェクト] > [Java アプリケーション] を選択します。デフォルトを取る
- JavaApplicationTemp を削除
- NetBeans を使用して、ソース パッケージ IDE フォルダー (src/ に移動します) に上記のファイルを作成します。
- org.netbeans.rest.application.config.ApplicationConfig
- rest.GenericResource
- servlet.HelloWebServlet
- [新規] > [JUnit テスト] を選択します。デフォルトを使用し、JUnit 4.x を選択します
- NewEmptyJUnitTest を削除
- NetBeans を使用して、上記のファイルを Test Packages IDE フォルダー (test/ に移動します) に作成します。
- プロジェクトのプロパティを編集し、glassfish-embedded-all-3.1.1.jar を Libraries > Compile カテゴリに追加します
- [実行] > [プロジェクトのテスト] を選択します。理想的には、3 つの合格したテストが表示されます。
それが役立つことを願っています!