как протестировать сервлет при момощи мокита?

Подскажите как протестировать мой сервлет. Тест должен показать правильно ли был выбран из трёх вариантов бин.

    public class Book {

        private String title;
        private Float price;
        private String description;
        private String number;

        public Book(){

        }

        public Book(String title, Float price, String description){
            this.title = title;
            this.price = price;
            this.description = description;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public Float getPrice() {
            return price;
        }

        public void setPrice(Float price) {
            this.price = price;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getNumber() {
            return number;
        }

        public void setNumber(String number) {
            this.number = number;
        }

        @Override

        public String toString() {
            final StringBuilder sb = new StringBuilder();
            sb.append("Book{");
            sb.append("title='").append(title).append('\'');
            sb.append(", price=").append(price);
            sb.append(", description='").append(description).append('\'');
            sb.append(", number='").append(number).append('\'');
            sb.append('}');
            return sb.toString();
        }
    }

    import javax.inject.Inject;

    @Loggable
    public class BookService {

        @Inject
        @ThirteenDigits
        private NumberGenerator numberGenerator;


        public Book createBook(String title, Float price, String description) {
            Book book = new Book(title, price, description);
            book.setNumber(numberGenerator.generateNumber());
            return book;
        }
    }

    import javax.inject.Qualifier;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;

    @Qualifier
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
    public @interface EightDigits {
    }

    import javax.inject.Inject;
    import java.util.Random;
    import java.util.logging.Logger;

    @ThirteenDigits
    public class IsbnGenerator implements NumberGenerator {

        @Inject
        private Logger logger;

        @Loggable
        public String generateNumber() {
            String isbn = "13-84356-" + Math.abs(new Random().nextInt());
            logger.info("Generated ISBN : " + isbn);
            return isbn;
        }
    }

    import javax.inject.Inject;
    import java.util.Random;
    import java.util.logging.Logger;

    @EightDigits
    public class IssnGenerator implements NumberGenerator {

        @Inject
        private Logger logger;

        @Loggable
        public String generateNumber() {
            String issn =  "8-" + Math.abs(new Random().nextInt());
            logger.info("Generated ISBN : " + issn);
            return issn;
        }
    }
    Java

    import javax.interceptor.InterceptorBinding;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;

    @InterceptorBinding
    @Target({ElementType.METHOD, ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Loggable {
    }


    import javax.inject.Inject;
    import javax.interceptor.AroundInvoke;
    import javax.interceptor.Interceptor;
    import javax.interceptor.InvocationContext;
    import java.util.logging.Logger;

    @Loggable
    @Interceptor
    public class LoggingInterceptor {

        @Inject
        private Logger logger;

        @AroundInvoke
        public Object logMethod(InvocationContext ic) throws Exception{
            System.out.println("Aaaaaaaaaaaaa");
            logger.entering(ic.getTarget().getClass().getName(), ic.getMethod().getName());
            try {
                return ic.proceed();
            } finally {
                logger.exiting(ic.getTarget().getClass().getName(), ic.getMethod().getName());
            }
        }
    }

    import javax.enterprise.inject.Produces;
    import javax.enterprise.inject.spi.InjectionPoint;
    import java.util.logging.Logger;

    public class LoggingProducer {

        @Produces
        public Logger produceLogger(InjectionPoint injectionPoint){
            return Logger.getLogger(injectionPoint.getMember().getName());
        }
    }

    import javax.inject.Inject;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;

    @WebServlet("/Sasha")
    public class Main extends HttpServlet {

        @Inject
        BookService bookService;

        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            Book book = bookService.createBook("H2G2", 12.5f, "Geeky scifi Book");
            System.out.println(book);
        }
    }

    public interface NumberGenerator {
        String generateNumber();
    }

    import javax.inject.Qualifier;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;

    @Qualifier
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
    public @interface ThirteenDigits {
    }

    import org.junit.Assert;
    import org.junit.Test;
    import org.mockito.Mockito;

    import javax.inject.Inject;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;


    public class BookServiceIT extends Mockito {

   // мой попытки

        @Inject
        BookService bookService;

        @Test
        public void shouldCheckNumberIsMock() throws ServletException, IOException {
            HttpServletRequest request = mock(HttpServletRequest.class);
            HttpServletResponse response = mock(HttpServletResponse.class);

    //        when(request.getParameter()).thenReturn();
            new Main().doGet(request, response);
            Book book = bookService.createBook("H2G2", 12.5f, "Geeky scifi Book");
            Assert.assertTrue(book.getNumber().startsWith("MOCK"));
        }
    }


    import javax.enterprise.inject.Alternative;
    import javax.inject.Inject;
    import java.util.Random;
    import java.util.logging.Logger;

    @Alternative
    @ThirteenDigits
    public class MockGenerator implements NumberGenerator {

    //клас для тестирование

        @Inject
        private Logger logger;

        @Loggable
        @Override
        public String generateNumber() {
            String mock = "MOCK-" + Math.abs(new Random().nextInt());
            logger.info("Generated Mock : " + mock);
            return mock;
        }
    } 

Ответы (0 шт):