[JavaEE] Implement a test for REST endpoint
2024-09-08 13:16:18
1. We have the BookEndpoint.java:
package com.pluralsight.bookstore.rest; import com.pluralsight.bookstore.model.Book;
import com.pluralsight.bookstore.repository.BookRepository; import javax.inject.Inject;
import javax.validation.constraints.Min;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo; import java.net.URI;
import java.util.List; import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
//api/books
@Path("/books")
public class BookEndpoint { @Inject
private BookRepository bookRepository; @POST
@Consumes(APPLICATION_JSON)
public Response createBook(Book book, @Context UriInfo uriInfo) {
book = bookRepository.create(book);
URI createedURI = uriInfo.getBaseUriBuilder().path(book.getId().toString()).build();
return Response.created(createedURI).build();
} @GET
@Produces(APPLICATION_JSON)
public Response getBooks() {
List<Book> books = bookRepository.findAll(); if(books.size() == 0) {
return Response.noContent().build();
}
return Response.ok(books).build();
} @GET
@Path("/{id: \\d+}")
@Produces(APPLICATION_JSON)
public Response getBook(@PathParam("id") @Min(1) Long id) {
Book book = bookRepository.find(id); if(book == null) {
return Response.status(Response.Status.NOT_FOUND).build();
} return Response.ok(book).build();
} // api/books/count
@GET
@Path("/count")
public Response countBooks() {
Long nbOfBooks = bookRepository.countAll(); if(nbOfBooks == 0) {
return Response.noContent().build();
} return Response.ok(nbOfBooks).build();
} @DELETE
@Path("/{id : \\d+}")
public Response deleteBook(Long id) {
bookRepository.delete(id);
return Response.noContent().build();
}
}
2. Creating a test for the REST endpoint:
package com.pluralsight.bookstore.rest; import com.pluralsight.bookstore.model.Book;
import com.pluralsight.bookstore.model.Language;
import com.pluralsight.bookstore.repository.BookRepository;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith; import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response; import java.util.Date; import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static javax.ws.rs.core.Response.Status.CREATED;
import static javax.ws.rs.core.Response.Status.NO_CONTENT;
import static org.junit.Assert.*; @RunWith(Arquillian.class)
public class BookEndpointTest {
//testable tell wildfly not to package this test,
// cause we want to test from outside by using HTTP
@Deployment(testable = false)
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class)
.addClass(BookRepository.class)
.addClass(Book.class)
.addClass(Language.class)
.addClass(BookEndpoint.class)
.addClass(JAXRSConfiguration.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
.addAsManifestResource("META-INF/test-persistence.xml", "persistence.xml");
} @After
public void tearDown() throws Exception {
} @Test
public void createBook(@ArquillianResource("api/books")WebTarget webTarget) {
// Test counting books
Response response = webTarget.path("count").request().get();
assertEquals(NO_CONTENT.getStatusCode(), response.getStatus()); // Test find all
response = webTarget.request(APPLICATION_JSON).get();
assertEquals(NO_CONTENT.getStatusCode(), response.getStatus()); // Create a book
Book book = new Book("isbn", null, 12F, 123, Language.ENGLISH, new Date(), "imageURL", "description");
response = webTarget.request(APPLICATION_JSON).post(Entity.entity(book, APPLICATION_JSON));
assertEquals(CREATED.getStatusCode(), response.getStatus()); }
}
最新文章
- 记jQuery.fn.show的一次踩坑和问题排查
- Oracle数据泵(Data Dump)错误汇集
- Cube Processing Options
- NOIP2012 同余方程-拓展欧几里得
- 错题集锦(二) -- Java专项
- javascripct导图
- 1088-Gnome Sequencing
- Ubuntu上VNC 配置
- java基础之导入(Excel)2
- iOS7 初体验
- 转载--初识绘图工具plantUML
- PHP:preg_replace
- PHP Markdown 解析器Parsedown
- 前端forEach在Array、map、set中的使用,weakset,weakmap
- Java学习 第二节
- WebAPI 抛出HttpResponseException异常
- IE下Userdata本地化存储
- Bootstrap fileinput v3.0(ssm版)
- Java中HashMap 初始化时容量(参数)如何设置合适?
- 八个常用的js正则表达式
热门文章
- 【转载】Hadoop分布式文件系统HDFS的工作原理详述
- 可以在一个html的文件当中读取另一个html文件的内容
- Android 仿微信调用第三方应用导航(百度,高德、腾讯)
- dive into python:模块的导入和搜索文件路径的配置
- android中用Intent传数据,如果用传递的是一个类,就将类实现Parcelable接口
- 连接服务器的mysql
- 让浏览器不再显示 https 页面中的 http 请求警报<;meta http-equiv=";Content-Security-Policy"; content=";upgrade-insecure-requests";>;
- BZOJ 1176: [Balkan2007]Mokia KDtree
- 华登区块狗系统APP开发
- react 导航切换