SlideShare a Scribd company logo
1 of 47
Download to read offline
JAVALAND 2016
ALIENS UND ZITRONEN IM KAMPF GEGEN BUGS
SPEAKER
CHRISTOPH DEPPISCH
▸ Senior software developer
▸ @ConSol* Munich, Germany
▸ 10 years of experience in Java
▸ Passionate about automated software testing
▸ Founder of the OpenSource framework Citrus
@freaky_styley
ALIENS UND ZITRONEN IM KAMPF GEGEN BUGS
▸ http://arquillian.org
▸ http://citrusframework.org
ARQUILLIAN & CITRUS
BOTH TOOLS ARE
▸ Test frameworks
▸ Written in Java
▸ Automated integration & acceptance tests
▸ OpenSource
VS.
Competitors or Companions?
INTEGRATION TESTS
WHAT ARE INTEGRATION TESTS?
Unit Integration
Focus: small software units
No dependencies
Test in isolation
Mocks
Low-Level
Focus: interaction of units
Dependencies
Messaging interfaces
Simulators
High-Level
INTEGRATION TESTS
INTEGRATION SETUP
APPLICATION SERVER
SYSTEM UNDER
TEST
CLIENTS SERVERCLIENTSCLIENTS SERVERSERVER
RESOURCES
SERVICES
CONFIGURATION
DB
INTEGRATION TESTS
INTEGRATION CHALLENGES
▸ Infrastructure setup
▸ Dependencies
▸ to other applications (messaging)
▸ to Mail-servers, FTP-servers, LDAP-servers
▸ to JMS message broker
▸ …
▸ Test execution slow
INTEGRATION TESTS
WHY ARE WE DOING THIS?
▸ Consequences of mocking and isolation in Unit tests
▸ Untested configuration
▸ Untested dependency injection
▸ Untested messaging interfaces
▸ We need to test
▸ Non-functional requirements (Logging, Monitoring, Configuration, …)
▸ Security (Authorization, Authentication, Certificates)
▸ Reliability (Failover, High Availability)
YAY, ALL
UNIT TESTS
PASSING!
@dave1010

via Twitter
EVERY PROJECT
NEEDS INTEGRATION
TESTS!
MICROSERVICES
SERVICE
SERVICECLIENT SERVICE
SERVICE SERVICE
SERVICESERVICESERVICE
EXTERNAL
CONTINUOUS
DELIVERY
AUTOMATION
ARQUILLIAN
ARQUILLIAN
GOALS
▸ Don’t mock me. Write real tests!
▸ In-container tests
▸ Container lifecycle management
▸ Archive deployment
▸ Dependency injection
▸ Access to managed resources
ARQUILLIAN
CONTAINER AGNOSTIC
ARQUILLIAN
CONTAINER MODE
▸ Remote
▸ completely separate container
▸ Managed
▸ separate JVM, but Arquillian managed
▸ Embedded
▸ same JVM process as Arquillian
▸ Embedded is the fastest - but no class path separation
ARQUILLIAN MAVEN DEPENDENCIES
<dependencies>


<dependency>

<groupId>org.jboss.arquillian</groupId>

<artifactId>arquillian-bom</artifactId>

<version>${arquillian.version}</version>

<scope>import</scope>

<type>pom</type>

</dependency>
<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>${junit.version}</version>

<scope>test</scope>

</dependency>



<dependency>

<groupId>org.jboss.arquillian.junit</groupId>

<artifactId>arquillian-junit-container</artifactId>

<version>${arquillian.version}</version>

<scope>test</scope>

</dependency>
</dependencies>
CONTAINER CONFIGURATION
<profile>

<id>wildfly-managed-arquillian</id>

<properties>

<serverRoot>${project.build.directory}/wildfly-${wildfly.version}</serverRoot>

</properties>

<dependencies>

<dependency>

<groupId>org.wildfly.arquillian</groupId>

<artifactId>wildfly-arquillian-container-managed</artifactId>

<version>1.0.2.Final</version>

<scope>test</scope>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-dependency-plugin</artifactId>

<executions>

<execution>

<id>wildfly-unpack</id>

<phase>generate-test-resources</phase>

<goals>

<goal>unpack</goal>

</goals>

[...]

</execution>

</executions>

</plugin>

</plugins>

</build>

</profile>
<?xml version="1.0" encoding="UTF-8"?>

<arquillian xmlns="http://jboss.org/schema/arquillian"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="
http://jboss.org/schema/arquillian
http://jboss.org/schema/arquillian/arquillian_1_0.xsd">



<defaultProtocol type="Servlet 3.0"/>



<container qualifier="wildfly-managed" default="true">

<configuration>

<property name="jbossHome">${jboss.home}</property>

<property name="serverConfig">standalone.xml</property>

<property name="allowConnectingToRunningServer">true</property>

</configuration>

</container>



</arquillian>
CITRUS EXTENSION
ARQUILLIAN.XML
ARQUILLIAN EXAMPLE
@RunWith(Arquillian.class)

@RunAsClient

public class EmployeeResourceTest {



@ArquillianResource

private URL baseUri;



@Deployment

public static WebArchive createDeployment() {

[...]

}



@Test

public void testGet() {
WebTarget webTarget = ClientBuilder.newClient().target(
URI.create(new URL(baseUri, "registry/employee").toExternalForm()));

webTarget.register(Employee.class);


Employee employee = webTarget

.path("{id}")

.resolveTemplate("id", "1")

.request(MediaType.APPLICATION_XML)

.get(Employee.class);

assertEquals("Leonard", employee.getName());

assertEquals(21, employee.getAge());

}

}
ARQUILLIAN
MICRO DEPLOYMENTS
▸ ShrinkWrap archives
▸ Include only the needed classes and dependencies
▸ Faster deployments
@Deployment

public static WebArchive createDeployment() {

return ShrinkWrap.create(WebArchive.class)

.addClasses(Employees.class, Employee.class, EmployeeRepository.class)

.addPackage(SmsGateway.class.getPackage())

.addAsLibraries(Maven.configureResolver()

.workOffline(true)

.resolve(CXF_GROUP_ID + ":cxf-rt-frontend-jaxws:" + CXF_VERSION,

CXF_GROUP_ID + ":cxf-rt-transports-http:" + CXF_VERSION)

.withTransitivity()

.asFile());
}
JAVALAND DEMO APPLICATION
DEMO APPLICATION
▸ Employee registry demo
▸ https://github.com/christophd/citrus-demo-javaland
WILDFLY CONTAINER
EMPLOYEE REGISTRY
ARQUILLIAN

TEST
RESOURCES
SERVICES
CONFIGURATION
REST API
ARQUILLIAN
DEMO
ARQUILLIAN
SUMMARY
▸ Arquillian makes it easy to run in-container tests
▸ Container lifecycle management
▸ Micro-deployments
▸ Access to container-managed resources
▸ Runs via command line or Java IDE
CITRUS
CITRUS
GOALS
▸ Test messaging interfaces
▸ Simulate messaging
▸ Sync/Async
▸ Client/Server
▸ Ready to use components
▸ Http REST, SOAP, JMS, FTP, RMI, JMX, …
SERVICE BSERVICE A
Interface
REST, SOAP, JMS, …
SERVICE BSERVICE A
Interface
REST, SOAP, JMS, …
Mock?

Simulator?
CITRUS
SERVICE A
Interface
REST, SOAP, JMS, …
JAVALAND DEMO APPLICATION
DEMO APPLICATION
▸ Employee registry demo
▸ https://github.com/christophd/citrus-demo-javaland
MAIL
SERVER
WILDFLY CONTAINER
EMPLOYEE REGISTRY
ARQUILLIAN

TEST
RESOURCES
SERVICES
CONFIGURATION
REST API
MAIL
SMS 

GATEWAY
SOAP
CITRUS MAVEN DEPENDENCIES
<dependency>

<groupId>com.consol.citrus</groupId>

<artifactId>citrus-core</artifactId>

<version>${citrus.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>com.consol.citrus</groupId>

<artifactId>citrus-java-dsl</artifactId>

<version>${citrus.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>com.consol.citrus</groupId>

<artifactId>citrus-arquillian</artifactId>

<version>${citrus.version}</version>

<scope>test</scope>

</dependency>


<dependency>

<groupId>com.consol.citrus</groupId>

<artifactId>citrus-mail</artifactId>

<version>${citrus.version}</version>

<scope>test</scope>

</dependency>
<?xml version="1.0" encoding="UTF-8"?>

<arquillian xmlns="http://jboss.org/schema/arquillian"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="
http://jboss.org/schema/arquillian
http://jboss.org/schema/arquillian/arquillian_1_0.xsd">



<defaultProtocol type="Servlet 3.0"/>



<container qualifier="wildfly-managed" default="true">

<configuration>

<property name="jbossHome">${jboss.home}</property>

<property name="serverConfig">standalone.xml</property>

<property name="allowConnectingToRunningServer">true</property>

</configuration>

</container>



<extension qualifier="citrus">

<property name="autoPackage">false</property>

<property name=„citrusVersion">2.5.1</property>

</extension>


</arquillian>
CITRUS EXTENSION
ARQUILLIAN.XML
ADDING CITRUS TO ARQUILLIAN
@RunWith(Arquillian.class)

@RunAsClient

public class EmployeeResourceTest {



@CitrusFramework

private Citrus citrusFramework;



@ArquillianResource

private URL baseUri;



@Deployment(testable = false)

public static WebArchive createDeployment() {

return Deployments.employeeWebRegistry();

}



@Test

@CitrusTest

public void testGetSingle(@CitrusResource TestDesigner citrus) {
String serviceUri = new URL(baseUri, "").toExternalForm();


citrus.http().client(serviceUri)

.get("/registry/employee/1")

.accept(MediaType.APPLICATION_XML);



citrus.http().client(serviceUri)

.response(HttpStatus.OK)

.payload("<employee><age>21</age><name>Leonard</name></employee>");



citrusFramework.run(citrus.getTestCase());

}

}
TEST ACTIONS
TEST ACTIONS
Action Description
echo Log message to console
send Sends a message
receive Receives a message
sleep Wait some time
sql Execute SQL statements
parallel Execute actions in parallel
conditional Execute actions based on
iterate Execute actions in iteration
repeat-on-error Failsafe action execution
…
CITRUS ENDPOINT CONFIGURATION
CITRUS-CONTEXT.XML
<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:citrus="http://www.citrusframework.org/schema/config"

xmlns:citrus-ws="http://www.citrusframework.org/schema/ws/config"

xmlns:citrus-mail="http://www.citrusframework.org/schema/mail/config"

xsi:schemaLocation="...">



<!-- Mail server mock -->

<citrus-mail:server id="mailServer"

auto-start="true"

port="2222"/>



</beans>
@CitrusEndpoint

private MailServer mailServer;



@Test

@CitrusTest

public void testPostWithWelcomeEmail(@CitrusResource TestDesigner citrus) {

citrus.variable("employee.name", "Rajesh");

citrus.variable("employee.age", "20");

citrus.variable("employee.email", "rajesh@example.com");



citrus.http().client(serviceUri)

.post()

.fork(true)

.contentType(MediaType.APPLICATION_FORM_URLENCODED)

.payload("name=${employee.name}&age=${employee.age}" +
"&email=${employee.email}");



citrus.receive(mailServer)

.payload(new ClassPathResource("templates/welcome-mail.xml"))

.header(CitrusMailMessageHeaders.MAIL_SUBJECT, "Welcome new employee")

.header(CitrusMailMessageHeaders.MAIL_TO, "${employee.email}");



citrus.send(mailServer)

.payload(new ClassPathResource("templates/welcome-mail-response.xml"));



citrus.http().client(serviceUri)

.response(HttpStatus.NO_CONTENT);



citrusFramework.run(citrus.getTestCase());

}
CITRUS BY EXAMPLE
<mail-message xmlns="http://www.citrusframework.org/schema/mail/message">

<from>employee-registry@example.com</from>

<to>${employee.email}</to>

<cc></cc>

<bcc></bcc>

<subject>Welcome new employee</subject>

<body>

<contentType>text/plain; charset=us-ascii</contentType>

<content>
We welcome you '${employee.name}' to our company - now get to work!
</content>

</body>

</mail-message>
WELCOME MAIL CONTENT
WELCOME-MAIL.XML
WELCOME-MAIL-RESPONSE.XML
<mail-response xmlns="http://www.citrusframework.org/schema/mail/message">

<code>250</code>

<message>OK</message>

</mail-response>
CITRUS ENDPOINT CONFIGURATION
CITRUS-CONTEXT.XML
<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:citrus="http://www.citrusframework.org/schema/config"

xmlns:citrus-soap="http://www.citrusframework.org/schema/ws/config"

xmlns:citrus-mail="http://www.citrusframework.org/schema/mail/config"

xsi:schemaLocation="...">



<citrus:schema-repository id="schemaRepository">

<citrus:locations>

<citrus:location path="classpath:wsdl/SmsGateway.wsdl"/>

</citrus:locations>

</citrus:schema-repository>

<!-- Sms Gateway SOAP server -->

<citrus-soap:server id="smsGatewayServer"

auto-start="true"

port="18008"

timeout=„5000"/>


<!-- Mail server mock -->

<citrus-mail:server id="mailServer"

auto-start="true"

port="2222"/>

</beans>
@CitrusEndpoint

private WebServiceServer smsGatewayServer;



@Test

@CitrusTest

public void testPostWithWelcomeSms(@CitrusResource TestDesigner citrus) {

citrus.variable("employee.name", "Bernadette");

citrus.variable("employee.age", "24");

citrus.variable("employee.mobile", "4915199999999");



citrus.http().client(serviceUri)

.post()

.fork(true)

.contentType(MediaType.APPLICATION_FORM_URLENCODED)

.payload("name=${employee.name}&age=${employee.age}" +
"&mobile=${employee.mobile}");



citrus.receive(smsGatewayServer)

.payload(new ClassPathResource("templates/send-sms-request.xml"));



citrus.send(smsGatewayServer)

.payload(new ClassPathResource("templates/send-sms-response.xml"));



citrus.http().client(serviceUri)

.response(HttpStatus.NO_CONTENT);



citrusFramework.run(citrus.getTestCase());

}
SMS GATEWAY TEST
<sms:SendSmsRequest xmlns:sms="http://www.smsgateway.org/schema/SmsGateway/v1">

<sms:communicationId>@variable('communicationId')@</sms:communicationId>

<sms:msisdn>${employee.mobile}</sms:msisdn>

<sms:text>Welcome on board '${employee.name}' - now get to work!</sms:text>

</sms:SendSmsRequest>
SMS REQUEST CONTENT
SEND-SMS-REQUEST.XML
SEND-SMS-RESPONSE.XML
<sms:SendSmsResponse xmlns:sms="http://www.smsgateway.org/schema/SmsGateway/v1">

<sms:communicationId>${communicationId}</sms:communicationId>

<sms:success>true</sms:success>

<sms:statusCode>200</sms:statusCode>

<sms:statusMsg>OK</sms:statusMsg>

</sms:SendSmsResponse>
CITRUS
DEMO
ENDPOINTS
ENDPOINTS
Component Description
citrus-http Http REST client and server
citrus-jms JMS queue or topic destination
citrus-ws SOAP client and server
citrus-mail SMTP mail client and server
citrus-docker Docker container management
citrus-camel Apache Camel endpoint
citrus-ftp FTP client and server
citrus-vertx Vert.x endpoint
citrus-ssh SSH client and server
…
CITRUS
SUMMARY
▸ Citrus makes it easy to test messaging
▸ Simulate messaging interfaces on client and server
▸ Citrus Arquillian extension
▸ @CitrusResource, @CitrusEndpoint, @CitrusFramework
▸ Runs via command line or Java IDE
QUESTIONS?

More Related Content

What's hot

How To Use Selenium Successfully (Java Edition)
How To Use Selenium Successfully (Java Edition)How To Use Selenium Successfully (Java Edition)
How To Use Selenium Successfully (Java Edition)
Dave Haeffner
 
A year in the life of a Grails startup
A year in the life of a Grails startupA year in the life of a Grails startup
A year in the life of a Grails startup
tomaslin
 

What's hot (20)

Integration Testing with Selenium
Integration Testing with SeleniumIntegration Testing with Selenium
Integration Testing with Selenium
 
How To Use Selenium Successfully (Java Edition)
How To Use Selenium Successfully (Java Edition)How To Use Selenium Successfully (Java Edition)
How To Use Selenium Successfully (Java Edition)
 
There's more to Ratpack than non-blocking
There's more to Ratpack than non-blockingThere's more to Ratpack than non-blocking
There's more to Ratpack than non-blocking
 
Continuous Testing in the Agile Age
Continuous Testing in the Agile AgeContinuous Testing in the Agile Age
Continuous Testing in the Agile Age
 
Automated acceptance test
Automated acceptance testAutomated acceptance test
Automated acceptance test
 
Unleashing Docker with Pipelines in Bitbucket Cloud
Unleashing Docker with Pipelines in Bitbucket CloudUnleashing Docker with Pipelines in Bitbucket Cloud
Unleashing Docker with Pipelines in Bitbucket Cloud
 
Building Search for Bitbucket Cloud
Building Search for Bitbucket CloudBuilding Search for Bitbucket Cloud
Building Search for Bitbucket Cloud
 
Setting Up Development Environment For Google App Engine & Python | Talentica
Setting Up Development Environment For Google App Engine & Python | TalenticaSetting Up Development Environment For Google App Engine & Python | Talentica
Setting Up Development Environment For Google App Engine & Python | Talentica
 
Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017
 
Web Services and Introduction of SOAPUI
Web Services and Introduction of SOAPUIWeb Services and Introduction of SOAPUI
Web Services and Introduction of SOAPUI
 
Top 10 reasons to migrate to Gradle
Top 10 reasons to migrate to GradleTop 10 reasons to migrate to Gradle
Top 10 reasons to migrate to Gradle
 
Drupal Deployment
Drupal DeploymentDrupal Deployment
Drupal Deployment
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0
 
Java 9 Functionality and Tooling
Java 9 Functionality and ToolingJava 9 Functionality and Tooling
Java 9 Functionality and Tooling
 
Shipping to Server and Cloud with Docker
Shipping to Server and Cloud with DockerShipping to Server and Cloud with Docker
Shipping to Server and Cloud with Docker
 
Practical Patterns for Developing a Cross-product Cross-version App
Practical Patterns for Developing a Cross-product Cross-version AppPractical Patterns for Developing a Cross-product Cross-version App
Practical Patterns for Developing a Cross-product Cross-version App
 
Test Policy and Practices
Test Policy and PracticesTest Policy and Practices
Test Policy and Practices
 
Make It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version ControlMake It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version Control
 
A year in the life of a Grails startup
A year in the life of a Grails startupA year in the life of a Grails startup
A year in the life of a Grails startup
 

Viewers also liked

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
 

Viewers also liked (20)

Testing Microservices with a Citrus twist
Testing Microservices with a Citrus twistTesting Microservices with a Citrus twist
Testing Microservices with a Citrus twist
 
Workshop calabash appium
Workshop calabash appiumWorkshop calabash appium
Workshop calabash appium
 
TestLink introduction
TestLink introductionTestLink introduction
TestLink introduction
 
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
 
Automated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choiceAutomated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choice
 
Pruebas funcionales de Software
Pruebas funcionales de SoftwarePruebas funcionales de Software
Pruebas funcionales de Software
 
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)
 

Similar to Arquillian & Citrus

GR8Conf 2011: Grails, how to plug in
GR8Conf 2011: Grails, how to plug inGR8Conf 2011: Grails, how to plug in
GR8Conf 2011: Grails, how to plug in
GR8Conf
 
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
Tobias Schneck
 
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
Tobias Schneck
 
Evaluating Test Driven Development And Parameterized Unit Testing In Dot Net ...
Evaluating Test Driven Development And Parameterized Unit Testing In Dot Net ...Evaluating Test Driven Development And Parameterized Unit Testing In Dot Net ...
Evaluating Test Driven Development And Parameterized Unit Testing In Dot Net ...
mdfachowdhury
 
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
enpit GmbH & Co. KG
 
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Andreas Koop
 

Similar to Arquillian & Citrus (20)

Testing your application on Google App Engine
Testing your application on Google App EngineTesting your application on Google App Engine
Testing your application on Google App Engine
 
Testing Your Application On Google App Engine
Testing Your Application On Google App EngineTesting Your Application On Google App Engine
Testing Your Application On Google App Engine
 
GR8Conf 2011: Grails, how to plug in
GR8Conf 2011: Grails, how to plug inGR8Conf 2011: Grails, how to plug in
GR8Conf 2011: Grails, how to plug in
 
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
 
JavaLand - Integration Testing How-to
JavaLand - Integration Testing How-toJavaLand - Integration Testing How-to
JavaLand - Integration Testing How-to
 
SharePoint Saturday Atlanta 2015
SharePoint Saturday Atlanta 2015SharePoint Saturday Atlanta 2015
SharePoint Saturday Atlanta 2015
 
Scala, Functional Programming and Team Productivity
Scala, Functional Programming and Team ProductivityScala, Functional Programming and Team Productivity
Scala, Functional Programming and Team Productivity
 
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
 
Take Control of your Integration Testing with TestContainers
Take Control of your Integration Testing with TestContainersTake Control of your Integration Testing with TestContainers
Take Control of your Integration Testing with TestContainers
 
Dropwizard Introduction
Dropwizard IntroductionDropwizard Introduction
Dropwizard Introduction
 
In the Brain of Hans Dockter: Gradle
In the Brain of Hans Dockter: GradleIn the Brain of Hans Dockter: Gradle
In the Brain of Hans Dockter: Gradle
 
Evaluating Test Driven Development And Parameterized Unit Testing In Dot Net ...
Evaluating Test Driven Development And Parameterized Unit Testing In Dot Net ...Evaluating Test Driven Development And Parameterized Unit Testing In Dot Net ...
Evaluating Test Driven Development And Parameterized Unit Testing In Dot Net ...
 
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
 
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
 
Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
Real world Webapp
Real world WebappReal world Webapp
Real world Webapp
 
jdays 2015
jdays 2015jdays 2015
jdays 2015
 
Writing testable android apps
Writing testable android appsWriting testable android apps
Writing testable android apps
 
Testable android apps
Testable android appsTestable android apps
Testable android apps
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

Arquillian & Citrus