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()); }
}

[JavaEE] Implement a test for REST endpoint的更多相关文章

  1. [JavaEE] Implement a REST Endpoint

    1. Create a rest folder with JAXRSConfiguration.java: package com.pluralsight.bookstore.rest; import ...

  2. 扩展Wcf call security service, 手动添加 Soap Security Head.

    有次我们有个项目需要Call 一个 Java 的 web service, Soap包中需要一个 Security Head <soapenv:Header> <wsse:Secur ...

  3. JavaEE路径陷阱之getRealPath

    转自:http://blog.csdn.net/shendl/article/details/1427637   JavaEE路径陷阱之getRealPath   本文是<Java路径问题最终解 ...

  4. 【JavaEE WEB 开发】Tomcat 详解 Servlet 入门

    转载请注明出处 :  http://blog.csdn.net/shulianghan/article/details/47146817 一. Tomcat 下载安装配置 1. Tomcat 下载 T ...

  5. Implement JSON Web Tokens Authentication in ASP.NET Web API and Identity 2.1 Part 3 (by TAISEER)

    http://bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-an ...

  6. [JavaEE] Injecting Bean

    So what is a Bean, in JavaEE, any class expect Entity are Bean. One usefully thing in Bean is Depend ...

  7. 【JavaEE WEB 开发】Tomcat 具体解释 Servlet 入门

    转载请注明出处 :  http://blog.csdn.net/shulianghan/article/details/47146817 一. Tomcat 下载安装配置 1. Tomcat 下载 T ...

  8. JavaEE三大框架的整合

    JavaEE三大框架的整合                                                                                       ...

  9. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

随机推荐

  1. 在idea中为类和方法自动生成注释

    https://my.oschina.net/mojiayi/blog/1608746

  2. java用匿名内部类实现多线程堆内存变量共享

    匿名内部类介绍:http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html 用Runnable模拟实现共享堆内存变量 import ...

  3. linux环境mxnet 安装

    环境ubuntu 16.04 1.安装依赖项: sudo update && sudo apt-get install -y build-essential git libatlas- ...

  4. 重新学习Java——对象和类(一)

    之前通过记笔记的方法,对于<Java核心技术>这本书的前一章进行了重新的复习,感觉效果很好,比单独看书带来了更好的复习效果,了解了很多以前不是很注意的一些细节,但是在一些自己较为熟悉的地方 ...

  5. 面试中的一些小问题之html5和html4的区别?

    HTML5建立的一些新规则: 新特性应该基于HTML.CSS.DOM.JavaScript: 减少对外部插件的需求,如flash将会用video标签和audio标签代替: 更加优秀的错误处理: 更多取 ...

  6. 使用morphia实现对mongodb的聚合查询

    morphia是谷歌的一个针对mongodb的数据化持久框架: 关于mongodb的介绍不在这里展示,直接进入主题:采用morphia实现对mongodb的聚合查询 这里获取所有学生的分数总和 spr ...

  7. Win7访问不了WINXP共享文件

    用win xp的机器可以访问,但用win 7的机器无法访问共享文件 提示:您没有权限访问.请与网络管理员联系请求访问权限 网上找了相应的资料 做了如下动作 1. 打开网上邻居→本地连接→属性里,“看是 ...

  8. Linux 中ifconfig和ip addr命令查看不到ip解决方法

    1.输入查看ip的命令ifconfig或ip addr,查不到ip 2.查看ens33网卡配置,输入 vi /etc/sysconfig/network-scripts/ifcfg-ens33 将ON ...

  9. Linux下ifconfig不显示ip地址问题总结

    问题一:ifconfig之后只显示lo,没有看到eth0 ? eth0设置不正确,导致无法正常启动,修改eth0配置文件就好 ubuntu 12.04的网络设置文件是/etc/network/inte ...

  10. 解决[disabled]="true"与formControlName冲突

    import { FormBuilder } from '@angular/forms'; form; constructor(private fb: FormBuilder) { this.form ...