SlideShare une entreprise Scribd logo
1  sur  42
Test Java EE applications with
Arquillian
Ivan St. Ivanov
@ivan_stefanov
About me
@ivan_stefanov
nosoftskills.com
@ivan_stefanov
@ivan_stefanov
Java EE Changed a Lot
 Standalone technologies
◦ EJB container
◦ JPA
◦ CDI
 Arquillian testing framework
@ivan_stefanov
Techniques to test Java EE apps
 Testing Persistence
 Testing Contexts and Dependency Injection (CDI)
 Testing business logic
 Testing whole scenarios
@ivan_stefanov
The showcase app
 Collects match predictions from registered users
 Award points for correct predictions
 Used technologies
◦ Java 8
◦ Java EE 8 – JPA, CDI, EJB, JAX-RS, JSF
 Source code:
https://github.com/ivannov/predcomposer
@ivan_stefanov
@ivan_stefanov
Testing Persistence
 Use embedded databases (HSQLDB, Derby)
 Covered by other tests, often not needed
 Used for quick check of persistence code
@ivan_stefanov
1) Create persistence.xml
<persistence version="2.1">
<persistence-unit name="predcomposer-test" transaction-
type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.driver“
value="org.hsqldb.jdbcDriver"/>
<property name="javax.persistence.jdbc.url“
value="jdbc:hsqldb:mem:testdb"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
</properties>
</persistence-unit>
</persistence>
@ivan_stefanov
2) Initialize EntityManager
protected static EntityManager entityManager;
@BeforeClass
public static void setupTestObjects() {
EntityManagerFactory emf = Persistence
.createEntityManagerFactory(
"predcomposer-test");
entityManager = emf.createEntityManager();
}
@ivan_stefanov
3) Begin transaction
@Before
public void setUp() throws Exception {
entityManager.getTransaction().begin();
insertTestData();
entityManager.flush();
this.competitionsService = new CompetitionsService();
competitionsService.entityManager = entityManager;
}
@ivan_stefanov
@Test
public void shouldStoreCompetition() throws Exception {
Competition newCompetition = new Competition(
"Premiership 2015/2016", "The English Premier League");
Competition storedCompetition = competitionsService
.storeCompetition(newCompetition);
assertNotNull(storedCompetition.getId());
assertEquals(newCompetition,
entityManager.find(Competition.class,
storedCompetition.getId()));
}
4) Write your test
@ivan_stefanov
5) Cleanup
@After
public void tearDown() {
entityManager.getTransaction().rollback();
}
@AfterClass
public static void closeEntityManager() {
entityManager.close();
}
@ivan_stefanov
@ivan_stefanov
Testing CDI
 Use CDI Unit or Deltaspike
 Launches CDI container
 Easy injection of dependencies, mocks, alternatives
 Control of requests and sessions
 Used for quick tests when dependencies and
scopes are involved
@ivan_stefanov
1) Add dependency
<dependency>
<groupId>org.jglue.cdi-unit</groupId>
<artifactId>cdi-unit</artifactId>
<version>3.1.2</version>
<scope>test</scope>
</dependency>
@ivan_stefanov
@RunWith(CdiRunner.class)
public class ViewGamePredictionsBeanTest {
@Inject
private ViewGamePredictionsBean bean;
@Test
public void shouldLoadGamePredictionsUponRequest() {
bean.showGamePredictions(game2);
assertEquals(2, bean.getPredictions().size());
}
}
2) Write the test
@ivan_stefanov
@Alternative
public class PredictionsServiceAlternative extends PredictionsService {
@Override
public Set<Prediction> getPredictionsForGame(Game game) {
// return two predictions
}
}
3) Create alternative
@ivan_stefanov
@RunWith(CdiRunner.class)
@ActivatedAlternatives({
PredictionsServiceAlternative.class,
})
public class ViewGamePredictionsBeanTest {
4) Add the alternative
@ivan_stefanov
@ivan_stefanov
Greeting earthlings
@ivan_stefanov
Core principles
 Tests should be portable to any container
 Tests should be executable from both IDE and build
tool
 The platform should extend existing test frameworks
@ivan_stefanov
Step 1 – pick a container
 Container extensions
◦ JBoss, Tomcat, Weld, Glassfish, Jetty,
WebSphere, WebLogic
@ivan_stefanov
1) Add dependencies and profile
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>
wildfly-arquillian-container-managed
</artifactId>
<scope>test</scope>
</dependency>
@ivan_stefanov
Step 2 – connect the container
 Container types
◦ Embedded
◦ Managed
◦ Remote
@ivan_stefanov
2) Configure container
<arquillian>
<container qualifier="arquillian-wildfly-managed">
<configuration>
<property name="jbossHome">
target/wildfly-9.0.1.Final
</property>
</configuration>
</container>
</arquillian>
@ivan_stefanov
Step 3 – package and deploy
 ShrinkWrap library
◦ Deployment
◦ Resolve from Maven
◦ Create descriptors
@ivan_stefanov
@RunWith(Arquillian.class)
public class CompetitionsServiceIntegrationTest {
@Deployment
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class)
.addClass(CompetitionsService.class)
.addPackage(Prediction.class.getPackage())
.addAsResource(
new File("src/main/resources/META-INF/persistence.xml"),
"META-INF/persistence.xml");
}
}
3) Prepare the test archive
@ivan_stefanov
Step 4 – run the test
 Tests runs in-container
◦ CDI, EJB, JNDI available
◦ No need to mock most of the services
 Present the result as a normal unit test
@ivan_stefanov
@Inject
private CompetitionsService competitionsService;
@Test
public void shouldCreateCompetition() throws Exception {
testCompetition = new Competition("Premiership 2015/2016",
"English Premier League");
testGame = new Game("Manchester City", "Juventus",
LocalDateTime.of(2015, 9, 15, 21, 45));
testCompetition.getGames().add(testGame);
Competition persistedCompetition =
competitionsService.storeCompetition(testCompetition);
assertNotNull(persistedCompetition.getId());
assertEquals(testCompetition, persistedCompetition);
}
4.1) Write the test
@ivan_stefanov
@RunWith(Arquillian.class)
@RunAsClient
public class CompetitionResourceTest {
@Test
public void shouldCreateCompetition(@ArquillianResource URL base) {
URL url = new URL(base, "rest/competition");
WebTarget target = ClientBuilder.newClient().target(url.toExternalForm());
Form newCompetitionForm = new Form();
newCompetitionForm.param("name", COMPETITION_NAME);
newCompetitionForm.param("description", DESCRIPTION);
Response response = target.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.entity(newCompetitionForm,
MediaType.APPLICATION_FORM_URLENCODED_TYPE));
assertEquals(201, response.getStatus());
}
}
4.2) Client side tests
@ivan_stefanov
Step 5 – undeploy the test
 Undeploy the test archive
 Disconnect or stop the container
@ivan_stefanov
@ivan_stefanov
That’s not all
 Persistence extension
 Warp
 Drone
 Graphene
 AngularJS, Android, OSGi
 …
@ivan_stefanov
Graphene extension
 Drive the application via page navigation
 Support for AJAX
 PageObject pattern
@ivan_stefanov
1) Add dependencies
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-drone-bom</artifactId>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.selenium</groupId>
<artifactId>selenium-bom</artifactId>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.graphene</groupId>
<artifactId>graphene-webdriver</artifactId>
<type>pom</type>
<scope>test</scope>
</dependency>
@ivan_stefanov
2) Configure extension
<arquillian>
<extension qualifier="webdriver">
<property name="browser">phantomjs</property>
</extension>
</arquillian>
@ivan_stefanov
3) Create the page object
@Location("login.jsf")
public class LoginPage {
@FindBy(id = "loginForm:userName")
private WebElement userName;
@FindBy(id = "loginForm:password")
private WebElement password;
@FindBy(id = "loginForm:login")
private WebElement loginButton;
public void login(String userName, String password) {
this.userName.sendKeys(userName);
this.password.sendKeys(password);
guardHttp(loginButton).click();
}
}
@ivan_stefanov
4) Create the scenario test
@RunWith(Arquillian.class)
@RunAsClient
public class LoginScenarioTest {
@Drone
private WebDriver browser;
@Page
private HomePage homePage;
@Test
public void shouldSayHelloUponSuccessfulLogin(
@InitialPage LoginPage loginPage) {
loginPage.login("ivan", "ivan");
homePage.assertGreetingMessage("Ivan");
homePage.assertGameFormVisible(true);
}
}
@ivan_stefanov
@ivan_stefanov
@ivan_stefanov
Resources
 Showcase app
https://github.com/ivannov/predcomposer
 Arquillian
http://aslakknutsen.github.io/presentations/
https://rpestano.wordpress.com/2014/06/08/arquillian
/
https://rpestano.wordpress.com/2014/10/25/arquillian
-and-mocks/

Contenu connexe

Tendances

Exactpro Systems for KSTU Students in Kostroma
Exactpro Systems for KSTU Students in KostromaExactpro Systems for KSTU Students in Kostroma
Exactpro Systems for KSTU Students in Kostroma
Iosif Itkin
 

Tendances (20)

Selenium Frameworks
Selenium FrameworksSelenium Frameworks
Selenium Frameworks
 
Unit testing - A&BP CC
Unit testing - A&BP CCUnit testing - A&BP CC
Unit testing - A&BP CC
 
Apache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolboxApache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolbox
 
Automation solution
Automation solutionAutomation solution
Automation solution
 
Automation solution using jbehave, selenium and hudson
Automation solution using jbehave, selenium and hudsonAutomation solution using jbehave, selenium and hudson
Automation solution using jbehave, selenium and hudson
 
Arquillian - Integration Testing Made Easy
Arquillian - Integration Testing Made EasyArquillian - Integration Testing Made Easy
Arquillian - Integration Testing Made Easy
 
Apache Lucene for Java EE Developers
Apache Lucene for Java EE DevelopersApache Lucene for Java EE Developers
Apache Lucene for Java EE Developers
 
Continuous Delivery - Automate & Build Better Software with Travis CI
Continuous Delivery - Automate & Build Better Software with Travis CIContinuous Delivery - Automate & Build Better Software with Travis CI
Continuous Delivery - Automate & Build Better Software with Travis CI
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]
 
Exactpro Systems for KSTU Students in Kostroma
Exactpro Systems for KSTU Students in KostromaExactpro Systems for KSTU Students in Kostroma
Exactpro Systems for KSTU Students in Kostroma
 
Protractor overview
Protractor overviewProtractor overview
Protractor overview
 
Integration Testing with Selenium
Integration Testing with SeleniumIntegration Testing with Selenium
Integration Testing with Selenium
 
Testing Code.org's Interactive CS Curriculum
Testing Code.org's Interactive CS CurriculumTesting Code.org's Interactive CS Curriculum
Testing Code.org's Interactive CS Curriculum
 
Automated Testing in Angular Slides
Automated Testing in Angular SlidesAutomated Testing in Angular Slides
Automated Testing in Angular Slides
 
Practical Tips & Tricks for Selenium Test Automation
Practical Tips & Tricks for Selenium Test AutomationPractical Tips & Tricks for Selenium Test Automation
Practical Tips & Tricks for Selenium Test Automation
 
Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0
 
BMO - Intelligent Projects with Maven
BMO - Intelligent Projects with MavenBMO - Intelligent Projects with Maven
BMO - Intelligent Projects with Maven
 
Testing with laravel
Testing with laravelTesting with laravel
Testing with laravel
 
Expert selenium with core java
Expert selenium with core javaExpert selenium with core java
Expert selenium with core java
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)
 

En vedette

Lunch and learn: Cucumber and Capybara
Lunch and learn: Cucumber and CapybaraLunch and learn: Cucumber and Capybara
Lunch and learn: Cucumber and Capybara
Marc Seeger
 

En vedette (20)

TestLink introduction
TestLink introductionTestLink introduction
TestLink introduction
 
Testing Microservices with a Citrus twist
Testing Microservices with a Citrus twistTesting Microservices with a Citrus twist
Testing Microservices with a Citrus twist
 
Capybara testing
Capybara testingCapybara testing
Capybara testing
 
Bdd (Behavior Driven Development)
Bdd (Behavior Driven Development)Bdd (Behavior Driven Development)
Bdd (Behavior Driven Development)
 
Lunch and learn: Cucumber and Capybara
Lunch and learn: Cucumber and CapybaraLunch and learn: Cucumber and Capybara
Lunch and learn: Cucumber and Capybara
 
Workshop calabash appium
Workshop calabash appiumWorkshop calabash appium
Workshop calabash appium
 
Pruebas funcionales de Software
Pruebas funcionales de SoftwarePruebas funcionales de Software
Pruebas funcionales de Software
 
Automated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choiceAutomated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choice
 
Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013
 
Three Uses Of JIRA Beyond Bug Tracking
Three Uses Of JIRA Beyond Bug TrackingThree Uses Of JIRA Beyond Bug Tracking
Three Uses Of JIRA Beyond Bug Tracking
 
Introduction To Confluence
Introduction To ConfluenceIntroduction To Confluence
Introduction To Confluence
 
Jira as a Tool for Test Management
Jira as a Tool for Test ManagementJira as a Tool for Test Management
Jira as a Tool for Test Management
 
Using JIRA Software for Issue Tracking
Using JIRA Software for Issue TrackingUsing JIRA Software for Issue Tracking
Using JIRA Software for Issue Tracking
 
Introduction To Jira
Introduction To JiraIntroduction To Jira
Introduction To Jira
 
Story Testing Approach for Enterprise Applications using Selenium Framework
Story Testing Approach for Enterprise Applications using Selenium FrameworkStory Testing Approach for Enterprise Applications using Selenium Framework
Story Testing Approach for Enterprise Applications using Selenium Framework
 
Next level of Appium
Next level of AppiumNext level of Appium
Next level of Appium
 
Automate you Appium test like a pro!
Automate you Appium test like a pro!Automate you Appium test like a pro!
Automate you Appium test like a pro!
 
Gerrit is Getting Native with RPM, Deb and Docker
Gerrit is Getting Native with RPM, Deb and DockerGerrit is Getting Native with RPM, Deb and Docker
Gerrit is Getting Native with RPM, Deb and Docker
 
Introduction to Bdd and cucumber
Introduction to Bdd and cucumberIntroduction to Bdd and cucumber
Introduction to Bdd and cucumber
 
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
 

Similaire à Testing Java EE apps with Arquillian

Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...
Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...
Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...
JAXLondon2014
 
Java EE 6, Eclipse @ EclipseCon
Java EE 6, Eclipse @ EclipseConJava EE 6, Eclipse @ EclipseCon
Java EE 6, Eclipse @ EclipseCon
Ludovic Champenois
 

Similaire à Testing Java EE apps with Arquillian (20)

Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
 
Arquillian in a nutshell
Arquillian in a nutshellArquillian in a nutshell
Arquillian in a nutshell
 
Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...
Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...
Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...
 
Testing the Enterprise layers, with Arquillian
Testing the Enterprise layers, with ArquillianTesting the Enterprise layers, with Arquillian
Testing the Enterprise layers, with Arquillian
 
Easy Java Integration Testing with Testcontainers​
Easy Java Integration Testing with Testcontainers​Easy Java Integration Testing with Testcontainers​
Easy Java Integration Testing with Testcontainers​
 
Jakarta EE Test Strategies (2022)
Jakarta EE Test Strategies (2022)Jakarta EE Test Strategies (2022)
Jakarta EE Test Strategies (2022)
 
Test it! Unit, mocking and in-container Meet Arquillian!
Test it! Unit, mocking and in-container Meet Arquillian!Test it! Unit, mocking and in-container Meet Arquillian!
Test it! Unit, mocking and in-container Meet Arquillian!
 
Arquillian in a nutshell
Arquillian in a nutshellArquillian in a nutshell
Arquillian in a nutshell
 
Testing JSF with Arquillian and Selenium
Testing JSF with Arquillian and SeleniumTesting JSF with Arquillian and Selenium
Testing JSF with Arquillian and Selenium
 
Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparison
 
JBoss AS7 OSDC 2011
JBoss AS7 OSDC 2011JBoss AS7 OSDC 2011
JBoss AS7 OSDC 2011
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
Maven2交流
Maven2交流Maven2交流
Maven2交流
 
Java EE7 Demystified
Java EE7 DemystifiedJava EE7 Demystified
Java EE7 Demystified
 
Javascript tdd byandreapaciolla
Javascript tdd byandreapaciollaJavascript tdd byandreapaciolla
Javascript tdd byandreapaciolla
 
GlassFish Embedded API
GlassFish Embedded APIGlassFish Embedded API
GlassFish Embedded API
 
Java EE 6, Eclipse @ EclipseCon
Java EE 6, Eclipse @ EclipseConJava EE 6, Eclipse @ EclipseCon
Java EE 6, Eclipse @ EclipseCon
 
Migrating Beyond Java 8
Migrating Beyond Java 8Migrating Beyond Java 8
Migrating Beyond Java 8
 
Java code coverage with JCov. Implementation details and use cases.
Java code coverage with JCov. Implementation details and use cases.Java code coverage with JCov. Implementation details and use cases.
Java code coverage with JCov. Implementation details and use cases.
 
Introduction To Maven2
Introduction To Maven2Introduction To Maven2
Introduction To Maven2
 

Dernier

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 

Dernier (20)

Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 

Testing Java EE apps with Arquillian

Notes de l'éditeur

  1. Testing J2EE was considered hard