跳至主要内容

Book Review: Arquillian Testing Guide




Today I have received my hard copy of the book, Arquillian Testing Guide. Comparing to the resource I had got at the end of last year, much content are improved.
Arquillian is a modern Java EE testing framework, based the well-known JUnit or TestNG, brought by JBoss.org.
In fact, currently Arquillian is beyond Java EE, and not only for Java EE application and Java EE container, such as it also supports Android application test and can run test in Android system(or Android simulator) . Most of my Arquillian experience is based on Java EE.
If you have some experience of JUnit experience before, and eager to find a testing solution for your Java EE application and want to run the test case in container automatically, this book is for you.
With Arquillian, you are free from preparing the test fixture before you write real tests. You can write tests in the nature way, such as using @Inject, @Resource etc in your test case directly as the way in your classes.
Let's have a look at what is included in the book.
Chapter 1 : What is Arquillian is a conceptual introduction to Arquillian, and also includes some some best practice to categorize the test case classes via Maven Profiles when you are using Maven.
Chapter 2: The Evolution of Testing is a review of the testing solution history for Java, especially for Java EE, and the pain and the lack of these legacy testing solution, and how Arquillian fills the blank table.
Chapter 3: Container Testing is a comprehensive reference of all popular Container supports. In this chapter, the popular embedded containers, managed containers, and remote containers will be introduced one by one. You can review this chapter frequently, when you are using Arquillian and some specific containers and encountering some problems in development .
Chapter 4: Why Did the Test Fail is a good beginning when you are a newbie of Arquillian, it will help find the reasons of the problems and resolve them gracefully when you are adopting Arquillian .
Chapter 5: Enriching the Enterprise Test Case , you will learn how to use Arquillian to test CDI and EJB in your enterprise application. It also provides some content for Spring application test with Arquillian.
Chapter 6: Arquillian Extensions extends what you have learned in Chapter 5, and introduces the JPA, Transaction testing, and it is also an introduction of the code coverage.
Chapter 7: Functional Application Testing , in this chapter you will learn how to use Selenium with Arquillian together, and use the Warp and Graphere arquillian extension to test modern Ajax and rich web application.
Chapter 8: Service Testing includes the approaches to test SOAP based web service and REST web service, also includes an introduction of JMS and Seam 2 testing.
Chapter 9: Arquillian and OSGI will introduce how to use Arquillian to test the OSGI bundle in JBoss and Glassfish application server.
Chapter 10: ShrinkWrap in Action is an excellent tutorial of the ShrinkWrap API, you can learn how to resolve the dependencies and package the test archive in detail.
You can review the detailed content table from the Arquillian Testing Guide book page of packt publishing website.
Thank the JBoss Arquillian Team for bringing the Arquillian to the Java world and a special thank to Johon D. Ament who wrote such a good book to all Arquillian fans. And thank Packt publishing for providing me excellent experience to review this book.
Enjoy reading!

评论

此博客中的热门博文

Build a Reactive application with Angular 5 and Spring Boot 2.0

I have created a post to describe Reactive programming supports in Spring 5 and its subprojects, all codes of this article are updated the latest Spring 5 RELEASE, check spring-reactive-sample under my Github account.
In this post, I will create a simple blog system, including:
A user can sign in and sign out.An authenticated user can create a post.An authenticated user can update a post.Only the user who has ADMIN role can delete a post.All users(including anonymous users) can view post list and post details.An authenticated user can add his comments to a certain post. The backend will be built with the latest Spring 5 reactive stack, including:
Spring Boot 2.0, at the moment the latest version is 2.0.0.M7Spring Data MongoDB supports reactive operations for MongoDBSpring Session adds reactive support for WebSessionSpring Security 5 aligns with Spring 5 reactive stack The frontend is an Angular based SPA and it will be generated by Angular CLI.
The source code is hosted on Github, …

Activating CDI in JSF 2.3

Activating CDI in JSF 2.3 When I upgraed my Java EE 7 sample to the newest Java EE 8, the first thing confused me is the CDI beans are not recoganized in Facelects template in a JSF 2.3 based web applicaiton, which is working in the development version, but in the final release version, they are always resolved as null. I filed an issue on Mojarra and discussed it with the developers from communities and the JSF experts.
According to the content of README, In a JSF 2.3 application, to activate CDI support, declaring a 2.3 versioned faces-config.xml and adding javax.faces.ENABLE_CDI_RESOLVER_CHAIN in web.xml is not enough, you have to declare @FacesConfig annotated class to enable CDI.
Here is the steps I created a workable JSF 2.3 applicatoin in Java EE 8.
Create a Java web application, this can be done easily by NetBeans IDE, or generated by Maven archetype, for exmaple.
$ mvn archetype:generate -DgroupId=com.example -DartifactId=demo -DarchetypeArtifactId=maven-archetype-w…

JSF 2.3:Websocket support

Websocket support One of the most attractive features is JSF 2.3 added native websocket support, it means you can write real-time applications with JSF and no need extra effort.
To enable websocket support, you have to add javax.faces.ENABLE_WEBSOCKET_ENDPOINT in web.xml.
<context-param> <param-name>javax.faces.ENABLE_WEBSOCKET_ENDPOINT</param-name> <param-value>true</param-value> </context-param> Hello Websocket Let's start with a simple example.
@ViewScoped@Named("helloBean") publicclassHelloBeanimplementsSerializable { privatestaticfinalLoggerLOG=Logger.getLogger(HelloBean.class.getName()); @Inject@PushPushContext helloChannel; String message; publicvoidsendMessage() { LOG.log(Level.INFO, "send push message"); this.sendPushMessage("hello"); } privatevoidsendPushMessage(Objectmessage) { helloChannel.send(""+ message +" at &…