zoukankan      html  css  js  c++  java
  • [JavaEE] Implement a test for REST endpoint

    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());
    
        }
    }
  • 相关阅读:
    Ubuntu 16.04安装迅雷(兼容性不高)
    Ubuntu 16.04安装QQ(不一定成功)
    Ubuntu查看隐藏文件夹的方法
    Ubuntu下非常规方法安装绿色软件(压缩包)
    Ubuntu下常规方法安装软件
    Ubuntu 16.04下截图工具Shutter
    java中 awt Graphics2D
    Vue2.0总结———vue使用过程常见的一些问题
    MySQL 中隔离级别 RC 与 RR 的区别
    DBAplus社群线上分享----Sharding-Sphere之Proxy初探
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9420544.html
Copyright © 2011-2022 走看看