Riga Dev Day - Automated Android Continuous IntegrationNicolas Fränkel
This document discusses setting up continuous integration for Android projects. It describes issues with dependencies like Gradle and Robolectric not working properly due to proxy restrictions. It proposes solutions like using a local Maven repository, configuring Gradle properties, and creating a custom Robolectric test runner and dependency resolver. It also addresses problems updating the Android SDK due to needing proxy authentication and license agreements. An Expect script is created to automate providing the credentials and agreeing to licenses during the SDK update process.
2014 Joker - Integration Testing from the TrenchesNicolas Fränkel
This document discusses integration testing and provides guidance on how to effectively test systems with dependencies on external resources like databases and web services. It emphasizes separating integration tests from unit tests, faking dependencies using tools like in-memory databases and SOAPUI, and testing applications in their real container using the Spring Test framework.
This document provides an overview of integration testing. It discusses what integration testing is, the challenges of integration testing, and some solutions and best practices for integration testing. Specifically, it covers:
- The differences between unit testing and integration testing
- Examples of testing components together (like testing each part of a car separately vs doing a test drive)
- Techniques for reducing brittle and slow integration tests, like separating tests from infrastructure dependencies
- Tools for faking dependencies like databases, web services, and containers in integration tests
- Best practices for integration testing with build tools like Maven and for continuous integration
JNation - Integration Testing from the Trenches RebootedNicolas Fränkel
Years after Kent Beck provided JUnit, unit testing is part of most developer teams tooling. However, there's a trend that tends to threaten unit testing, claiming only integration testing can truly detects defects in software.
In this talk, we will first define what unit testing and integration testing are, and their respective pros, cons and uses. Then, we will have a look at the unique challenges posed by integration testing. Finally, tools and techniques will be presented to somewhat remedy to that so that integration testing becomes a true asset in each software developer bag of tricks.
Arquillian is an innovative and highly extensible testing platform for the JVM that enables developers to easily create automated integration, functional and acceptance tests for Java middleware, from Java EE and beyond.
For years we’ve been exploring how to layer and separate our code to test in isolation on the unit level. We’ve kept integration and functional testing as a big ball of mud; jumping straight from unit to full system testing. But can we apply some of the same lessons learned from unit to integration testing?
Speaker Bio:
Arquillian project lead, Aslak Knutsen, is a Senior Software Engineer at Red Hat where he is working on projects such as Arquillian and ShrinkWrap, one of the founders of the JBoss Testing initiative and a speaker at major industry conferences including JavaOne, Devoxx, Jazoon, JFokus, Geecon, JUDCon and JBoss World.
Building a Spring Boot Application - Ask the Audience!🎤 Hanno Embregts 🎸
This document provides an overview of building applications with Spring Boot. It discusses key features such as creating stand-alone Spring applications without separate web servers, automatic Spring configuration, and getting started quickly with one Java file and a build script. Pros include faster deployments and no need for web.xml files. Cons can include custom configuration challenges and incompatibility with some legacy Spring projects. The document also demonstrates sample code and references Spring Initializr for project setups.
The document introduces Spring Boot, a framework for building cloud native applications. It discusses how Spring Boot makes it easy to create stand-alone, production-grade Spring based applications that you can "just run". It also covers cloud native principles and deploying Spring Boot applications to Cloud Foundry. The presenter's background and references for further information are provided.
Rasheed Amir presents on Spring Boot. He discusses how Spring Boot aims to help developers build production-grade Spring applications quickly with minimal configuration. It provides default functionality for tasks like embedding servers and externalizing configuration. Spring Boot favors convention over configuration and aims to get developers started quickly with a single focus. It also exposes auto-configuration for common Spring and related technologies so that applications can take advantage of them without needing to explicitly configure them.
Riga Dev Day - Automated Android Continuous IntegrationNicolas Fränkel
This document discusses setting up continuous integration for Android projects. It describes issues with dependencies like Gradle and Robolectric not working properly due to proxy restrictions. It proposes solutions like using a local Maven repository, configuring Gradle properties, and creating a custom Robolectric test runner and dependency resolver. It also addresses problems updating the Android SDK due to needing proxy authentication and license agreements. An Expect script is created to automate providing the credentials and agreeing to licenses during the SDK update process.
2014 Joker - Integration Testing from the TrenchesNicolas Fränkel
This document discusses integration testing and provides guidance on how to effectively test systems with dependencies on external resources like databases and web services. It emphasizes separating integration tests from unit tests, faking dependencies using tools like in-memory databases and SOAPUI, and testing applications in their real container using the Spring Test framework.
This document provides an overview of integration testing. It discusses what integration testing is, the challenges of integration testing, and some solutions and best practices for integration testing. Specifically, it covers:
- The differences between unit testing and integration testing
- Examples of testing components together (like testing each part of a car separately vs doing a test drive)
- Techniques for reducing brittle and slow integration tests, like separating tests from infrastructure dependencies
- Tools for faking dependencies like databases, web services, and containers in integration tests
- Best practices for integration testing with build tools like Maven and for continuous integration
JNation - Integration Testing from the Trenches RebootedNicolas Fränkel
Years after Kent Beck provided JUnit, unit testing is part of most developer teams tooling. However, there's a trend that tends to threaten unit testing, claiming only integration testing can truly detects defects in software.
In this talk, we will first define what unit testing and integration testing are, and their respective pros, cons and uses. Then, we will have a look at the unique challenges posed by integration testing. Finally, tools and techniques will be presented to somewhat remedy to that so that integration testing becomes a true asset in each software developer bag of tricks.
Arquillian is an innovative and highly extensible testing platform for the JVM that enables developers to easily create automated integration, functional and acceptance tests for Java middleware, from Java EE and beyond.
For years we’ve been exploring how to layer and separate our code to test in isolation on the unit level. We’ve kept integration and functional testing as a big ball of mud; jumping straight from unit to full system testing. But can we apply some of the same lessons learned from unit to integration testing?
Speaker Bio:
Arquillian project lead, Aslak Knutsen, is a Senior Software Engineer at Red Hat where he is working on projects such as Arquillian and ShrinkWrap, one of the founders of the JBoss Testing initiative and a speaker at major industry conferences including JavaOne, Devoxx, Jazoon, JFokus, Geecon, JUDCon and JBoss World.
Building a Spring Boot Application - Ask the Audience!🎤 Hanno Embregts 🎸
This document provides an overview of building applications with Spring Boot. It discusses key features such as creating stand-alone Spring applications without separate web servers, automatic Spring configuration, and getting started quickly with one Java file and a build script. Pros include faster deployments and no need for web.xml files. Cons can include custom configuration challenges and incompatibility with some legacy Spring projects. The document also demonstrates sample code and references Spring Initializr for project setups.
The document introduces Spring Boot, a framework for building cloud native applications. It discusses how Spring Boot makes it easy to create stand-alone, production-grade Spring based applications that you can "just run". It also covers cloud native principles and deploying Spring Boot applications to Cloud Foundry. The presenter's background and references for further information are provided.
Rasheed Amir presents on Spring Boot. He discusses how Spring Boot aims to help developers build production-grade Spring applications quickly with minimal configuration. It provides default functionality for tasks like embedding servers and externalizing configuration. Spring Boot favors convention over configuration and aims to get developers started quickly with a single focus. It also exposes auto-configuration for common Spring and related technologies so that applications can take advantage of them without needing to explicitly configure them.
Spring Boot is a framework for creating stand-alone, production-grade Spring based applications that can be "just run". It takes an opinionated view of the Spring platform and third-party libraries so that new and existing Spring developers can quickly get started with minimal configuration. Spring Boot aims to get developers up and running as quickly as possible with features like embedded HTTP servers, automatic configuration, and opinions on structure and dependencies.
Spring boot is a great and relatively a new project from Spring.io. The presentation discusses about basics of spring boot to advance topics. Sample demo apps are available here : https://github.com/bhagwat/spring-boot-samples
The document discusses challenges with testing Java EE applications and introduces Arquillian as a framework that aims to make testing easier. It provides flexibility through pluggable components, allows testing directly from IDEs, and abstracts server lifecycles. Key features include bundling test dependencies without repackaging, injecting resources into tests, and supporting various containers and test frameworks.
How do I Write Testable Javascript so I can Test my CF API on Server and ClientColdFusionConference
The document provides an overview of testing APIs and web applications using various testing tools and frameworks like Jasmine and Testbox. It discusses different types of tests like unit tests, integration tests, end-to-end tests etc. and how to structure code to make it more testable. It also demonstrates how to set up testing environments using standalone Jasmine, Jasmine with Node.js, Grunt and Testbox and write tests with examples. The document emphasizes the importance of testing and provides tips to improve testing workflow.
Maven is a build tool that can manage a project's build process, dependencies, documentation and reporting. It uses a Project Object Model (POM) file to store build configuration and metadata. Maven has advantages over Ant like built-in functionality for common tasks, cross-project reuse, and support for conditional logic. It works by defining the project with a POM file then running goals bound to default phases like compile, test, package to build the project.
Testing the Grails Spring Security PluginsBurt Beckwith
The document discusses different types of tests that can be used to test the Grails Spring Security plugin: unit tests, integration tests, and functional tests. It explains that unit and integration tests are not ideal because they do not test against a real filter chain. Functional tests are recommended as they make real requests against a properly configured web server, allowing testing of authentication, authorization, and full configuration. The document provides details on using the Grails functional test plugin to write and run functional tests against a Grails application secured by Spring Security.
This presentation provides a comprehensive overview of Maven 3 including lifecycles and a detail of the default lifecycle and the associated phases within.
This document summarizes a presentation about SpringBoot, a framework for creating Spring applications. It discusses how SpringBoot uses Groovy and removes the need for XML configuration. It provides an overview of Texas NIC where the presenter works and some of their applications. It then discusses why SpringBoot was created, how it can be used with Groovy, and demonstrates some sample applications. It also covers some good aspects of SpringBoot, things that can be confusing, and unexpected behaviors. It concludes with some tips for using SpringBoot with IntelliJ IDEA.
This document provides an overview of Selenium testing tools and techniques. It discusses headless testing using Xvfb and PhantomJS. It also covers visual testing with Applitools, using proxy servers like BrowserMob for status codes and performance testing, and emulating mobile devices. Additional topics include growl notifications, file handling, A/B testing, and resources for learning more about Selenium.
The document provides an overview of the Apache Maven tutorial. It discusses how to set up the Maven environment and install Maven on different operating systems. It also describes the Maven POM file and its basic elements like groupId, artifactId and version. The Maven lifecycle, plugins, dependencies and integration with IDEs are also summarized.
Apache Lucene is the de-facto standard open source library for Java developers to implement full-text-search capabilities.
While it’s thriving in its field, it is rarely mentioned in the scope of Java EE development.
In this talk we will see for which features many developers love Lucene, make some concrete examples of common problems it elegantly solves, and see some best practices about using it in a Java EE stack.
Finally we'll see how some popular OSS projects such as Hibernate ORM (JPA provider), WildFly (Java EE runtime) and Infinispan (in-memory datagrid, JCache implementor) actually provide great Lucene integration capabilities.
Join us for this interactive event and get your hands dirty with some WildFly 9 hacking!
Our host Kabir Khan will explain how you can contribute to the WildFly project at many different levels, from properly reporting bugs in the forums and issue tracker, to actually being able to submit a pull request.
During this interactive event you will have a chance to play with WildFly 9 and try some of the following:
• Find a JIRA you want to work on.
• See how to check-out the code and setup your IDE.
• Build WildFly
• Code walkthrough - code organisation, jboss-modules etc.
• Debug something from a stack trace in a JIRA issue to nail down the problem.
• Try the testsuite
• And more!
Maven is the most popular Java Dependency Management Tool.
In this hands-on course, you will understand how Maven makes the life of a Java developer easy. We will use a step by step approach with 20 steps.
During the course, you will automate these using Maven.
Compiling Java Code
Running Unit Tests
Building Jar's and Wars
Running web applications in Tomcat
Setting up new projects
You will learn following features of Maven with 5 Example Projects on Github.
Dependency Management - including Transitive Dependencies
Maven Project Object Model
Maven Build Life Cycle
Maven Plugins
Maven Archetypes - Generate Projects
Maven Best Practices
Multi Module Maven Projects
Using JHipster for generating Angular/Spring Boot appsYakov Fain
The document discusses using JHipster 4 for generating Angular and Spring Boot applications. It begins with an overview of Spring Boot and Angular and demonstrates generating a basic monolithic application with them. It then introduces JHipster as a tool for generating Angular/Spring Boot projects along with best practices. The rest of the document demonstrates features of JHipster like generating entities, internationalization, and microservices architecture.
The document summarizes the key features and highlights of Spring Boot 1.3, which is scheduled for release in September 2015. Some of the main things covered include Spring 4.2 support, new auto-configurations for caching, OAuth2, and other components, improvements to non-functional aspects like metrics export, and enhancements to DevOps tools including a systemd service generator and improved development tools. Upcoming user group events related to Spring are also announced.
Learn about WP Acceptance. A new framework that empowers developers and CI pipelines to test codebases using version controlled acceptance tests and sharable environments.
Building Grails Plugins - Tips And TricksMike Hugo
This document provides an overview of building Grails plugins, including tips and tricks. It discusses creating a plugin project structure, testing plugins, adding configuration, events, and internationalization. It also covers integrating plugins into applications, reloading changes during development, and publishing plugins for others to use.
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)Ondřej Machulda
Annotated slides from Berlin PHP Usergroup Meetup, 4th April 2017.
---
Not only unit tests but also end-to-end tests in real browser are important part of test automation and test pyramid. So let's have a look how to easily write and run Selenium functional tests using PHPUnit and Steward.
Spring Boot allows creating standalone Spring applications with minimal configuration. It makes assumptions about dependencies and provides default configurations. It aims to provide a faster development experience for Spring. Some key Spring Boot components include auto-configuration, core functionality, CLI, actuator for monitoring, and starters for common dependencies. To use Spring Boot, create a project with the Spring Initializr, add code and configurations, then build a jar file that can be run standalone.
This document discusses unit testing and JUnit. It defines unit testing as testing the smallest testable parts of an application, like functions and classes. JUnit is introduced as a testing framework for Java that allows writing unit tests using annotations like @Test. Tests can make assertions about expected results using methods like assertEquals(). The document also covers integration testing, which tests integrated components, and mocking frameworks like Mockito, which allow mocking dependencies to isolate units for testing.
Kotlin is a language developed by JetBrains that compiles to JVM bytecode and JavaScript. It is statically typed, supports functional and object-oriented programming, and is fully interoperable with Java. The document discusses Kotlin's advantages over Java for Android development, including null safety, named arguments, and extension functions. It also covers Kotlin libraries and tools that improve Android development, such as the Kotlin standard library, Kotlin extensions for Android, Anko, and Dagger 2 integration. The author shares their experience of migrating an Android project to Kotlin in a incremental, test-driven manner.
Spring Boot is a framework for creating stand-alone, production-grade Spring based applications that can be "just run". It takes an opinionated view of the Spring platform and third-party libraries so that new and existing Spring developers can quickly get started with minimal configuration. Spring Boot aims to get developers up and running as quickly as possible with features like embedded HTTP servers, automatic configuration, and opinions on structure and dependencies.
Spring boot is a great and relatively a new project from Spring.io. The presentation discusses about basics of spring boot to advance topics. Sample demo apps are available here : https://github.com/bhagwat/spring-boot-samples
The document discusses challenges with testing Java EE applications and introduces Arquillian as a framework that aims to make testing easier. It provides flexibility through pluggable components, allows testing directly from IDEs, and abstracts server lifecycles. Key features include bundling test dependencies without repackaging, injecting resources into tests, and supporting various containers and test frameworks.
How do I Write Testable Javascript so I can Test my CF API on Server and ClientColdFusionConference
The document provides an overview of testing APIs and web applications using various testing tools and frameworks like Jasmine and Testbox. It discusses different types of tests like unit tests, integration tests, end-to-end tests etc. and how to structure code to make it more testable. It also demonstrates how to set up testing environments using standalone Jasmine, Jasmine with Node.js, Grunt and Testbox and write tests with examples. The document emphasizes the importance of testing and provides tips to improve testing workflow.
Maven is a build tool that can manage a project's build process, dependencies, documentation and reporting. It uses a Project Object Model (POM) file to store build configuration and metadata. Maven has advantages over Ant like built-in functionality for common tasks, cross-project reuse, and support for conditional logic. It works by defining the project with a POM file then running goals bound to default phases like compile, test, package to build the project.
Testing the Grails Spring Security PluginsBurt Beckwith
The document discusses different types of tests that can be used to test the Grails Spring Security plugin: unit tests, integration tests, and functional tests. It explains that unit and integration tests are not ideal because they do not test against a real filter chain. Functional tests are recommended as they make real requests against a properly configured web server, allowing testing of authentication, authorization, and full configuration. The document provides details on using the Grails functional test plugin to write and run functional tests against a Grails application secured by Spring Security.
This presentation provides a comprehensive overview of Maven 3 including lifecycles and a detail of the default lifecycle and the associated phases within.
This document summarizes a presentation about SpringBoot, a framework for creating Spring applications. It discusses how SpringBoot uses Groovy and removes the need for XML configuration. It provides an overview of Texas NIC where the presenter works and some of their applications. It then discusses why SpringBoot was created, how it can be used with Groovy, and demonstrates some sample applications. It also covers some good aspects of SpringBoot, things that can be confusing, and unexpected behaviors. It concludes with some tips for using SpringBoot with IntelliJ IDEA.
This document provides an overview of Selenium testing tools and techniques. It discusses headless testing using Xvfb and PhantomJS. It also covers visual testing with Applitools, using proxy servers like BrowserMob for status codes and performance testing, and emulating mobile devices. Additional topics include growl notifications, file handling, A/B testing, and resources for learning more about Selenium.
The document provides an overview of the Apache Maven tutorial. It discusses how to set up the Maven environment and install Maven on different operating systems. It also describes the Maven POM file and its basic elements like groupId, artifactId and version. The Maven lifecycle, plugins, dependencies and integration with IDEs are also summarized.
Apache Lucene is the de-facto standard open source library for Java developers to implement full-text-search capabilities.
While it’s thriving in its field, it is rarely mentioned in the scope of Java EE development.
In this talk we will see for which features many developers love Lucene, make some concrete examples of common problems it elegantly solves, and see some best practices about using it in a Java EE stack.
Finally we'll see how some popular OSS projects such as Hibernate ORM (JPA provider), WildFly (Java EE runtime) and Infinispan (in-memory datagrid, JCache implementor) actually provide great Lucene integration capabilities.
Join us for this interactive event and get your hands dirty with some WildFly 9 hacking!
Our host Kabir Khan will explain how you can contribute to the WildFly project at many different levels, from properly reporting bugs in the forums and issue tracker, to actually being able to submit a pull request.
During this interactive event you will have a chance to play with WildFly 9 and try some of the following:
• Find a JIRA you want to work on.
• See how to check-out the code and setup your IDE.
• Build WildFly
• Code walkthrough - code organisation, jboss-modules etc.
• Debug something from a stack trace in a JIRA issue to nail down the problem.
• Try the testsuite
• And more!
Maven is the most popular Java Dependency Management Tool.
In this hands-on course, you will understand how Maven makes the life of a Java developer easy. We will use a step by step approach with 20 steps.
During the course, you will automate these using Maven.
Compiling Java Code
Running Unit Tests
Building Jar's and Wars
Running web applications in Tomcat
Setting up new projects
You will learn following features of Maven with 5 Example Projects on Github.
Dependency Management - including Transitive Dependencies
Maven Project Object Model
Maven Build Life Cycle
Maven Plugins
Maven Archetypes - Generate Projects
Maven Best Practices
Multi Module Maven Projects
Using JHipster for generating Angular/Spring Boot appsYakov Fain
The document discusses using JHipster 4 for generating Angular and Spring Boot applications. It begins with an overview of Spring Boot and Angular and demonstrates generating a basic monolithic application with them. It then introduces JHipster as a tool for generating Angular/Spring Boot projects along with best practices. The rest of the document demonstrates features of JHipster like generating entities, internationalization, and microservices architecture.
The document summarizes the key features and highlights of Spring Boot 1.3, which is scheduled for release in September 2015. Some of the main things covered include Spring 4.2 support, new auto-configurations for caching, OAuth2, and other components, improvements to non-functional aspects like metrics export, and enhancements to DevOps tools including a systemd service generator and improved development tools. Upcoming user group events related to Spring are also announced.
Learn about WP Acceptance. A new framework that empowers developers and CI pipelines to test codebases using version controlled acceptance tests and sharable environments.
Building Grails Plugins - Tips And TricksMike Hugo
This document provides an overview of building Grails plugins, including tips and tricks. It discusses creating a plugin project structure, testing plugins, adding configuration, events, and internationalization. It also covers integrating plugins into applications, reloading changes during development, and publishing plugins for others to use.
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)Ondřej Machulda
Annotated slides from Berlin PHP Usergroup Meetup, 4th April 2017.
---
Not only unit tests but also end-to-end tests in real browser are important part of test automation and test pyramid. So let's have a look how to easily write and run Selenium functional tests using PHPUnit and Steward.
Spring Boot allows creating standalone Spring applications with minimal configuration. It makes assumptions about dependencies and provides default configurations. It aims to provide a faster development experience for Spring. Some key Spring Boot components include auto-configuration, core functionality, CLI, actuator for monitoring, and starters for common dependencies. To use Spring Boot, create a project with the Spring Initializr, add code and configurations, then build a jar file that can be run standalone.
This document discusses unit testing and JUnit. It defines unit testing as testing the smallest testable parts of an application, like functions and classes. JUnit is introduced as a testing framework for Java that allows writing unit tests using annotations like @Test. Tests can make assertions about expected results using methods like assertEquals(). The document also covers integration testing, which tests integrated components, and mocking frameworks like Mockito, which allow mocking dependencies to isolate units for testing.
Kotlin is a language developed by JetBrains that compiles to JVM bytecode and JavaScript. It is statically typed, supports functional and object-oriented programming, and is fully interoperable with Java. The document discusses Kotlin's advantages over Java for Android development, including null safety, named arguments, and extension functions. It also covers Kotlin libraries and tools that improve Android development, such as the Kotlin standard library, Kotlin extensions for Android, Anko, and Dagger 2 integration. The author shares their experience of migrating an Android project to Kotlin in a incremental, test-driven manner.
GeeCON - Improve your tests with Mutation TestingNicolas Fränkel
This document discusses mutation testing as a way to improve test quality. Mutation testing works by modifying the source code slightly (creating mutants) and checking if tests can detect the changes. This is more effective than just measuring code coverage, which can be gamed. The document recommends using a tool like PIT to perform mutation testing, and provides tips on configuring it for performance when running as part of test suites. While mutation testing has limitations, it can help prioritize testing of critical or complex code.
The document discusses refactoring legacy code. It defines refactoring as restructuring existing computer code without changing external behavior. It notes that code is often refactored to make it easier for future readers, including one's future self, to understand. The document also discusses object-oriented programming and introduces a set of "object calisthenics" rules for writing object-oriented code, such as limiting classes to two variables and avoiding getters/setters. It concludes with a reminder about refactoring one's own legacy code.
Nicolas Fränkel presents on how Spring Boot can help with DevOps practices. He discusses how Spring Boot applications can provide metadata, health checks, and metrics collection out of the box to monitor application health and performance. He demonstrates how to access an application's metadata, configure health checks for dependencies like databases, and collect standard metrics like gauges and counters for monitoring by tools like Graphite. Spring Boot makes it easy to add these non-functional capabilities that aid in DevOps workflows.
This document discusses cargo culting and memes in software development. It begins with the speaker introducing himself and his background. It then explores the concepts of cargo culting, which is reproducing outer forms to get benefits without understanding context, and memes, which are widespread ideas with little proof behind them. The document provides examples of cargo culting and memes in areas like Java practices and design patterns. It emphasizes questioning established practices and not accepting things purely on faith or tradition. The goal is to avoid blindly following practices without understanding why they work or don't work in a given context.
This document discusses Spring Boot and how it works under the hood. It explains how Spring Boot auto-configures applications and components like data access using Java configuration. Spring Boot uses conditions and conditional annotations to determine whether to auto-configure and activate beans and components. It also describes how to create a custom starter and configure conditions.
Voxxed Days Belgrade - Spring Boot & Kotlin, a match made in HeavenNicolas Fränkel
Nicolas Frankel presents on the match between Spring Boot and Kotlin. He discusses why Spring Boot is useful for convention over configuration and out-of-the-box features. Kotlin is also discussed as being more expressive than Java with improved object oriented and functional features. Key benefits of Kotlin include being more expressive than Java, improved object oriented programming, and adding functional programming capabilities. Extension methods are highlighted as a killer feature that allows adding new methods on existing types.
Morning at Lohika - Spring Boot Kotlin, a match made in HeavenNicolas Fränkel
The document discusses how Kotlin and Spring Boot are well integrated for developing applications. It provides an overview of Kotlin features like null safety and extensions, and how these improve on Java. It also discusses how Spring Boot works well with Kotlin's conventions. The document then shares details of a project to migrate a blog from XML to Markdown files using Kotlin and Spring Boot features like expression body methods and properties.
Spring Boot is a product from Spring, that provides many configuration defaults for a new Spring project, so that one can set up a project in minutes.
However, this is only one of the many features of Spring Boot. One of its module also provides many important Non-Functional Requirements out-of-the-box: monitoring, metrics, exposing those over HTTP, etc. In this presentation, I’ll demo some of those, that will make DevOps more than a little happy.
Current tech marketing aims at making you fall in love with microservices. But do you know their benefits and their requirements? What about their feasibility?
I.T.A.K.E Unconference - Mutation testing to the rescue of your testsNicolas Fränkel
This document summarizes mutation testing and how it can be used to test test quality. Mutation testing works by modifying the production code in small ways (e.g. changing a relational operator) and then running the test suite to see if the tests can detect the mutations. This is more effective than just measuring code coverage at ensuring tests are rigorous. The document outlines some Java tools for mutation testing like PIT and discusses how mutation testing can identify weaknesses in a test suite. Drawbacks like performance issues are also covered, along with ways to mitigate slowness like incremental analysis.
Continuous integration (CI) is a software development practice where developers integrate code into a shared repository frequently, preferably multiple times a day. Each integration is verified by an automated build and test process to detect errors early. CI utilizes source control, automated builds, and tests to minimize the time between code changes being integrated and identified issues being found. While CI focuses on frequent code integration and testing, it does not require constant production releases or infrastructure automation. CI helps reduce integration problems and allows development teams to work together more efficiently.
This document provides an overview and introduction to Jenkins, an open-source automation server for continuous integration. It discusses what continuous integration is, best practices for CI, how Jenkins works and its features. Key points include that Jenkins allows automating the build, test and deployment process, has a large plugin ecosystem, and can be used to build projects in many languages beyond Java. The document also demonstrates how to set up and use basic Jenkins functionality.
Jenkins is an open-source tool for continuous integration that allows developers to integrate code changes frequently from a main branch using an automated build process. It detects errors early, measures code quality, and improves delivery speed. Jenkins supports various source control, build tools, and plugins to customize notifications and reporting. Security features allow restricting access and privileges based on user roles and projects.
DevExperience - The Dark Side of MicroservicesNicolas Fränkel
While microservices are hype, there are reasons to migrate to such an architecture. Also, benefits are to be evaluated in comparison to requirements. Are you ready to take a fresh look?
This document provides an overview of integration testing. It discusses the differences between unit and integration testing, challenges of integration testing like brittle tests and external dependencies, and techniques for integration testing like using fakes for resources and testing code within its container. It also provides examples of integration testing Spring applications, web services, and Java EE applications.
“I have stopped counting how many times I’ve done this from scratch” - was one of the responses to the tweet about starting the project called Spring Cloud Pipelines. Every company sets up a pipeline to take code from your source control, through unit testing and integration testing, to production from scratch. Every company creates some sort of automation to deploy its applications to servers. Enough is enough - time to automate that and focus on delivering business value.
In this presentation we’ll go through the contents of the Spring Cloud Pipelines project. We’ll start a new project for which we’ll have a deployment pipeline set up in no time. We’ll deploy to Cloud Foundry (but we also could do it with Kubernetes) and check if our application is backwards compatible so that we can roll it back on production.
Infinum Android Talks #17 - Testing your Android applications by Ivan KustInfinum
van will show you how to setup unit tests using Robolectric, how to test user interactions using Espresso and provide some tips and tricks for stress-free testing.
How do you automate the non-existing deployment routines of an organization with over 100 different customers, each having their own environments? How do you convince the leaders, developers and customers to give you the resources needed in order to automate everything? Is it really possible to introduce a deployment routine that works for everyone?
In less than six months, Karoline transformed the deployment routines at Epinova by introducing Octopus Deploy to the organization. She will take you through the steps needed to get started, the pitfalls along the way, and success that Octopus Deploy has become.
In this workshop we will start out by installing an Octopus Deploy server and tentacle on your laptop, before looking at the basic concepts of Environments, Machines, Roles and Projects. You will create a project of your own and deploy this using Octopus Deploy before we round off by looking at the advanced topics of Script modules, Step templates, Variable sets and Retention Policies.
At the end of this workshop, you'll have all the knowledge you need in order to create a more efficient and failproof deployment process for your project. Keep calm and deploy to production!
Mobicents Summit 2012 - George Vagenas - Testing SIP Applications with Arquil...telestax
This document summarizes a presentation about testing SIP applications using Arquillian and SipUnit. It discusses the Arquillian extension for SipServlets which allows testing SIP applications within Tomcat containers. It also discusses SipUnit which provides a test environment for unit testing SIP applications using JUnit and abstracting SIP message handling. Both projects aim to simplify testing of SIP applications.
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx PluginYasuharu Nakano
The document discusses how to speed up development of Groovy and Grails applications using GroovyServ and the Improx plugin. GroovyServ launches Groovy faster by pre-invoking it as a server. The Improx plugin allows running Grails tests and commands from an IDE by connecting to an interactive Grails shell via TCP/IP. This avoids restarting the JVM for each test and provides autocompletion. Demostrations show how these tools improve development workflow by making Groovy and test execution much faster.
Welcome to presentation on Spring boot which is really great and relatively a new project from Spring.io. Its aim is to simplify creating new spring framework based projects and unify their configurations by applying some conventions. This convention over configuration is already successfully applied in so called modern web based frameworks like Grails, Django, Play framework, Rails etc.
A discussion of three types of ember addons: one that makes components available to consuming apps, one that modifies the asset pipeline of consuming app, and one that adds a new command to ember-cli
Symbiosis of test automation tools. Several tools (graphwalker/selenide/allure/sikuli/browsermob proxy) overview and practical appliance in your Selenium automation project will be presented
Drupal 8 supports multiple ways to test your code, which gives developers the confidence to change functionality and ensure that regressions are caught early.
This session will introduce attendees to the following methods in Drupal 8 for providing test coverage:
Unit Tests
Kernel Tests
Functional Tests
Behavioral Tests
We will discuss when to use each kind of test, and how to handle potentially frustrating situations.
Code samples: https://github.com/ebeyrent/apod
Talk at RubyKaigi 2015.
Plugin architecture is known as a technique that brings extensibility to a program. Ruby has good language features for plugins. RubyGems.org is an excellent platform for plugin distribution. However, creating plugin architecture is not as easy as writing code without it: plugin loader, packaging, loosely-coupled API, and performance. Loading two versions of a gem is a unsolved challenge that is solved in Java on the other hand.
I have designed some open-source software such as Fluentd and Embulk. They provide most of functions by plugins. I will talk about their plugin-based architecture.
Make Your Build Great Again (DroidConSF 2017)Jared Burrows
Slow builds have been plaguing Android development since the very beginning, especially for large multi-dex projects. As libraries tend to grow in size and the more libraries an application consumes it will slow down the build, especially when an application goes over the mutli-dex limit. Libraries aren't the only thing that can slow down the build, adding many Gradle plugins and repositories can increase the time it takes to configure the Gradle build. This talk will be centered around how I was able to decrease Yammer for Android's Gradle build times by optimizing our use of the Android Gradle plugin and the Gradle setup of our multi-project build and will give several tools and tips on how to help you profile and decrease your build times as well.
You've heard about Continuous Integration and Continuous Deilvery but how do you get code from your machine to production in a rapid, repeatable manner? Let a build pipeline do the work for you! Sam Brown will walk through the how, the when and the why of the various aspects of a Contiuous Delivery build pipeline and how you can get started tomorrow implementing changes to realize build automation. This talk will start with an example pipeline and go into depth with each section detailing the pros and cons of different steps and why you should include them in your build process.
Many Scala developers nowadays consider using Dependency Injection frameworks an anti-pattern incompatible with modern FP settings. We argue that it's just a consequence of a bad experience with legacy Java runtime reflection-based implementations that lack features important for modern functional programming, such as a first-class support for higher-kinded types. We argue that as a paradigm for structuring purely functional programs, DI with automatic wiring compares favorably against implicits, monad transformers, free monads, algebraic effects, cake pattern et al, enabling scaling and a degree of modularity unachievable by any manual wiring approach. This talk covers DIStage – a transparent, flexible and efficient DI framework for Scala that enables late binding, testability, effect separation and modular resource management at scale, working with, instead of compromising the Scala type system.
Documentation: https://izumi.7mind.io/latest/release/doc/distage/
Testing Vue Apps with Cypress.io (STLJS Meetup April 2018)Christian Catalan
Presented at the STLJS Meetup (St Louis, MO)
We dive into a Vue application used in semiconductor labs for transistor measurements. We discuss how get started with E2E testing with Cypress.io. And give a crash course into Vue applications.
Video: https://www.youtube.com/watch?v=dpB0YgnFyZQ
Altitude San Francisco 2018: Testing with Fastly WorkshopFastly
A crucial step for continuous integration and continuous delivery with Fastly is testing the service configuration to provide confidence in changes. This workshop will cover unit-testing VCL, component testing a service as a black box, systems testing a service end-to-end and stakeholder acceptance testing.
OpenShift Build Pipelines @ Lightweight Java User Group MeetupTobias Schneck
A reliable test infrastructure is half the battle to get stable tests into your delivery pipeline. Therefore container technologies like Docker can help to build up an immutable deployment and test infrastructure. If you think one step further, you will soon get to the point where scalability came into your glance. To get this challenge done, something like a container-based CI/CD environment will be needed. Therefore we will take a look at the open-source solution "OpenShift". The container platform combined the Jenkins build pipeline and Kubernetes concepts to a ready-to-use CI/CD solution. The talk will show what of the platform components can be used to build up your self-hosted automated build, test and deployment pipeline. In a live demo session we will build a microservice application, unit test it, deploy it, execute API integration tests and at least run real UI-Tests in dockerized desktop containers.
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...Fwdays
At some point, we reached the limit of the existing build process in the Grammarly Editor monorepo. Build tools required too much time to support, and each new package increased build time and made dependency management harder. To move further, we had to rethink the architecture of the build process. Our solution: We switched to Bazel. In this talk, I will share our findings and how we made the architecture of the build process scalable and predictable.
Using Jhipster 4 for Generating Angular/Spring Boot AppsVMware Tanzu
YAKOV FAIN SOLUTIONS ARCHITECT, FARATA SYSTEMS
JHipster 4 is an open-source code generator that allows you to automate creation and configuration of a Web project that uses the Angular framework on the front and Spring Boot on the back. We'll start with a simple example where an Angular app consumes the REST service from Spring Boot. After that, we'll use JHipster to generate a complete Angular/Spring Boot project.
Similar to Java Day Kharkiv - Integration Testing from the Trenches Rebooted (20)
SnowCamp - Adding search to a legacy applicationNicolas Fränkel
Most applications evolve to a point where they need to provide search capabilities. But updating an application is always a risk. Plus, sometimes, you don’t have access to the source code. The easiest way to access the data is by getting them directly from the database.
The initial load is the easiest step. However, how do you keep the search index in sync with the database? How do you keep the latency between the search store and the source of truth, so your users don’t have to wait for the next run of the batch to access the newest changes?
In this live coding session, we will show you how you can solve this issue by connecting Elasticsearch to the database with a touch of Hazelcast.
On dit que GitHub est le CV d'un développeur. Un rapide coup d'œil à votre historique de commit et les recruteurs savent tout de vous. Cette approche comporte quelques problèmes. La plupart des entreprises ne publient même pas leur code sous une licence Open Source. Si vous travaillez pour l'une d'entre elles, et si vous n'êtes pas un développeur Open Source les soirs et les week-ends, alors vous n'avez aucune chance.
Récemment, GitHub a permis un certain degré de personnalisation de son profil. Ainsi, même si votre historique de commit a plus de blanc que de vert, vous pouvez fournir un bon point d'entrée pour les employeurs potentiels. Mais ça ne vaut que l'effort que vous y mettez et les données perdent leur valeur rapidement. Pourtant, avec un peu de travail et l'aide d'outils d'automatisation (tels que GitHub Actions), vous pouvez présenter un profil toujours à jour.
Zero-downtime deployment on Kubernetes with HazelcastNicolas Fränkel
Kubernetes allows a lot. After discovering its features, it’s easy to think it can magically transform your application deployment process into a painless no-event. For Hello World applications, that is the case. Unfortunately, not many of us do deploy such applications day-to-day because we need to handle state. Though it would be much easier to have stateless apps, and despite our best efforts in this direction, state is found in (at least) two places: sessions and databases.
You need to think keeping the state while stopping and starting application nodes. In this talk, I’ll demo how to update a Spring Boot app deployed on a Kubernetes cluster with a non-trivial database schema change with the help of Hazelcast, while keeping the service up during the entire update process.
jLove - A Change-Data-Capture use-case: designing an evergreen cacheNicolas Fränkel
When one’s app is challenged with poor performances, it’s easy to set up a cache in front of one’s SQL database. It doesn’t fix the root cause (e.g. bad schema design, bad SQL query, etc.) but it gets the job done. If the app is the only component that writes to the underlying database, it’s a no-brainer to update the cache accordingly, so the cache is always up-to-date with the data in the database.
Things start to go sour when the app is not the only component writing to the DB. Among other sources of writes, there are batches, other apps (shared databases exist unfortunately), etc. One might think about a couple of ways to keep data in sync i.e. polling the DB every now and then, DB triggers, etc. Unfortunately, they all have issues that make them unreliable and/or fragile.
You might have read about Change-Data-Capture before. It’s been described by Martin Kleppmann as turning the database inside out: it means the DB can send change events (SELECT, DELETE and UPDATE) that one can register to. Just opposite to Event Sourcing that aggregates events to produce state, CDC is about getting events out of states. Once CDC is implemented, one can subscribe to its events and update the cache accordingly. However, CDC is quite in its early stage, and implementations are quite specific.
In this talk, I’ll describe an easy-to-setup architecture that leverages CDC to have an evergreen cache.
BigData conference - Introduction to stream processingNicolas Fränkel
This document discusses stream processing and summarizes a presentation about the topic. It introduces Hazelcast Jet as a stream processing engine and covers open data standards like GTFS. It also describes a demo that uses GTFS data to enrich public transit vehicle position updates in real-time using Hazelcast Jet. The presentation discusses streaming approaches, benefits over batch processing, and provides an overview of stream processing concepts.
ADDO - Your own Kubernetes controller, not only in GoNicolas Fränkel
In Kubernetes, operators allow the API to be extended to your heart content. If one task requires too much YAML, it’s easy to create an operator to take care of the repetitive cruft, and only require a minimum amount of YAML.
On the other hand, since its beginnings, the Go language has been advertised as closer to the hardware, and is now ubiquitous in low-level programming. Kubernetes has been rewritten from Java to Go, and its whole ecosystem revolves around Go. For that reason, It’s only natural that Kubernetes provides a Go-based framework to create your own operator. While it makes sense, it requires organizations willing to go down this road to have Go developers, and/or train their teams in Go. While perfectly acceptable, this is not the only option. In fact, since Kubernetes is based on REST, why settle for Go and not use your own favorite language?
In this talk, I’ll describe what is an operator, how they work, how to design one, and finally demo a Java-based operator that is as good as a Go one.
TestCon Europe - Mutation Testing to the Rescue of Your TestsNicolas Fränkel
Unit testing ensures your production code is relevant. But what does ensure your testing code is relevant? Come discover mutation testing and make sure your never forget another assert again.
In the realm of testing, the code coverage metrics is the most often talked about. However, it doesn’t mean that the test has been useful or even that an assert has been coded. Mutation testing is a strategy to make sure that the test code is relevant.
In this talk, Nicolas will explain how Code Coverage is computed and what its inherent flaw is. Afterwards, he will describe how Mutation Testing work and how it helps pointing out code that is tested but leave out corner cases. He will also demo PIT, a Java production-grade framework that enables Mutation Testing.
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java applicationNicolas Fränkel
As “the Cloud” becomes more and more widespread, now is a good time to assess how you can containerize your Java application. I assume you’re able to write a a Dockerfile around the generated JAR. However, each time the application’s code will change, the whole image will need to be rebuilt. If you’re deploying to a local Kubernetes cluster environment, this increases that much the length of the feedback loop.
In this demo-based talk, I’ll present different ways to get your Java app in a container: Dockerfile, Jib, and Cloud Native Buildpacks. We will also have a look at what kind of Docker image they generate, how they layer the images, whether those images are compatible with skaffold, etc.
GeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cacheNicolas Fränkel
CDC is a brand new approach that "turns the database inside out": it allows to get events out of the database state. This can be leveraged to get a cache that is never stale.
JavaDay Istanbul - 3 improvements in your microservices architectureNicolas Fränkel
While a microservices architecture is more scalable than a monolith, it has a direct hit on performance.
To cope with that, one performance improvement is to set up a cache. It can be configured for database access, for REST calls or just to store session state across a cluster of server nodes. In this demo-based talk, I’ll show how Hazelcast In-Memory Data Grid can help you in each one of those areas and how to configure it. Hint: it’s much easier than one would expect.
At a point in the past, it was forecast that Java would die, but the JVM platform would be its legacy. And in fact, for a long time, the JVM has been tremendously successful. Wikipedia itself lists a bunch of languages that run on it, some of them close to Java e.g. Kotlin, some of them very remote e.g. Clojure.
But nowadays, the Cloud is becoming ubiquitous. Containerization is the way to go to alleviate some of the vendor lock-in issues. Kubernetes is a de facto platform. If a container needs to be killed for whatever reason (resource consumption, unhealthy, etc.), a new one needs to replace it as fast as possible. In that context, the JVM seems to be a dead-end: its startup time is huge in comparison to a native process. Likewise, it consumes a lot of memory that just increase the monthly bill.
What does that mean for us developers? Has all the time spent in learning the JVM ecosystem been invested with no hope of return over investment? Shall we need to invest even more time in new languages, frameworks, libraries, etc.? That is one possibility for sure. But we can also leverage our existing knowledge, and embrace the Cloud and containers ways with the help of some tools.
In this talk, I’ll create a simple URL shortener with a “standard” stack: Kotlin, JAX-RS and Hazelcast. Then, with the help of Quarkus and GraalVM, I’ll turn this application into a native executable with all Cloud/Container related work has been moved to the build process.
Devclub.lv - Introduction to stream processingNicolas Fränkel
While “software is eating the world”, those who are able to best manage the huge mass of data will emerge out on the top.
The batch processing model has been faithfully serving us for decades. However, it might have reached the end of its usefulness for all but some very specific use-cases. As the pace of businesses increases, most of the time, decision-makers prefer slightly wrong data sooner, than 100% accurate data later. Stream processing – or data streaming – exactly matches this usage: instead of managing the entire bulk of data, manage pieces of them as soon as they become available.
OSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring BootNicolas Fränkel
Kubernetes allows a lot. After discovering its features, it’s easy to think it can magically transform your application deployment process into a painless no-event. For Hello World applications, that is the case. Unfortunately, not many of us do deploy such applications day-to-day. You need to think about application backward compatibility, possible rollback, database schema migration, etc. I believe the later is one of the biggest pain point. In this talk, I’ll demo how to update a Spring Boot app deployed on a Kubernetes cluster with a non-trivial database schema migration with the help of Flyway, while keeping the service up during the entire update process.
JOnConf - A CDC use-case: designing an Evergreen CacheNicolas Fränkel
This document discusses using change data capture (CDC) and Hazelcast Jet to build an evergreen cache that remains in sync with a database. It covers alternatives to cache invalidation like polling and triggers, introduces CDC and the Debezium implementation, and proposes a Jet job that watches database change events, analyzes them, and updates the cache accordingly to solve the cache freshness problem.
London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...Nicolas Fränkel
When one’s app is challenged with poor performances, it’s easy to set up a cache in front of one’s SQL database. It doesn’t fix the root cause (e.g. bad schema design, bad SQL query, etc.) but it gets the job done. If the app is the only component that writes to the underlying database, it’s a no-brainer to update the cache accordingly, so the cache is always up-to-date with the data in the database.
Things start to go sour when the app is not the only component writing to the DB. Among other sources of writes, there are batches, other apps (shared databases exist, unfortunately), etc. One might think about a couple of ways to keep data in sync i.e. polling the DB every now and then, DB triggers, etc. Unfortunately, they all have issues that make them unreliable and/or fragile.
In this talk, I will describe an easy-to-setup architecture that leverages CDC to have an evergreen cache.
This talk will be about the reasons behind the new stream processing model, how it compare to the old batch model, what are their pros and cons, and a list of existing technologies implementing stream processing with their most prominent characteristics. It will contain details of one possible use-case of data streaming that is not possible with batches: display in (near) real-time all trains in Switzerland and their position on a map, beginning with an overview of all the requirements and the design. Finally, using an OpenData endpoint and the Hazelcast platform,showing a working demo implementation of it.
Java.IL - Your own Kubernetes controller, not only in Go!Nicolas Fränkel
In Kubernetes, operators allow the API to be extended to your heart content. If one task requires too much YAML, it’s easy to create an operator to take care of the repetitive cruft, and only require a minimum amount of YAML.
On the other hand, since its beginnings, the Go language has been advertised as closer to the hardware, and is now ubiquitous in low-level programming. Kubernetes has been rewritten from Java to Go, and its whole ecosystem revolves around Go. For that reason, It’s only natural that Kubernetes provides a Go-based framework to create your own operator. While it makes sense, it requires organizations willing to go down this road to have Go developers, and/or train their teams in Go. While perfectly acceptable, this is not the only option. In fact, since Kubernetes is based on REST, why settle for Go and not use your own favorite language?
In this talk, I’ll describe what is an operator, how they work, how to design one, and finally demo a Java-based operator that is as good as a Go one.
The document discusses stream processing and provides an overview of Hazelcast Jet. It begins with explaining why streaming is useful and describes different streaming approaches like event-driven programming. It then provides details on Hazelcast Jet, including its concepts of pipelines and jobs. The document also discusses open data standards like GTFS and demonstrates a sample streaming pipeline that enriches public transportation data from open APIs.
London Java Community - An Experiment in Continuous Deployment of JVM applica...Nicolas Fränkel
A couple of years ago, continuous integration in the JVM ecosystem meant Jenkins. Since that time, a lot of other tools have been made available. But new tools don’t mean new features, just new ways. Besides that, what about continuous deployment? There’s no tool that allows deploying new versions of a JVM-based application without downtime. The only way to achieve zero downtime is to have multiple nodes deployed on a platform, and let that platform achieve that e.g. Kubernetes.
And yet, achieving true continuous deployment of bytecode on one single JVM instance is possible if one changes one’s way of looking at things. What if the compilation could be seen as changes? What if those changes could be stored in a data store, and a listener on this data store could stream those changes to the running production JVM via the Attach API?
In this talk, we'll demo exactly that using Hazelcast and Hazelcast Jet - but it’s possible to re-use the principles that will be shown using other streaming technologies.
OSCONF - Your own Kubernetes controller: not only in GoNicolas Fränkel
This document discusses creating Kubernetes operators and controllers using different programming languages besides Go. It suggests that a Java-based controller is possible using the GraalVM, which allows creating native executables from Java bytecode. Key points covered include what controllers and operators are, that no specific technology stack is required, and that the JVM could be a good option for controller development with GraalVM's support for polyglot programming and creating native applications.
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
Atelier - Innover avec l’IA Générative et les graphes de connaissancesNeo4j
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Allez au-delà du battage médiatique autour de l’IA et découvrez des techniques pratiques pour utiliser l’IA de manière responsable à travers les données de votre organisation. Explorez comment utiliser les graphes de connaissances pour augmenter la précision, la transparence et la capacité d’explication dans les systèmes d’IA générative. Vous partirez avec une expérience pratique combinant les relations entre les données et les LLM pour apporter du contexte spécifique à votre domaine et améliorer votre raisonnement.
Amenez votre ordinateur portable et nous vous guiderons sur la mise en place de votre propre pile d’IA générative, en vous fournissant des exemples pratiques et codés pour démarrer en quelques minutes.
E-commerce Development Services- Hornet DynamicsHornet Dynamics
For any business hoping to succeed in the digital age, having a strong online presence is crucial. We offer Ecommerce Development Services that are customized according to your business requirements and client preferences, enabling you to create a dynamic, safe, and user-friendly online store.
Transform Your Communication with Cloud-Based IVR SolutionsTheSMSPoint
Discover the power of Cloud-Based IVR Solutions to streamline communication processes. Embrace scalability and cost-efficiency while enhancing customer experiences with features like automated call routing and voice recognition. Accessible from anywhere, these solutions integrate seamlessly with existing systems, providing real-time analytics for continuous improvement. Revolutionize your communication strategy today with Cloud-Based IVR Solutions. Learn more at: https://thesmspoint.com/channel/cloud-telephony
SOCRadar's Aviation Industry Q1 Incident Report is out now!
The aviation industry has always been a prime target for cybercriminals due to its critical infrastructure and high stakes. In the first quarter of 2024, the sector faced an alarming surge in cybersecurity threats, revealing its vulnerabilities and the relentless sophistication of cyber attackers.
SOCRadar’s Aviation Industry, Quarterly Incident Report, provides an in-depth analysis of these threats, detected and examined through our extensive monitoring of hacker forums, Telegram channels, and dark web platforms.
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Crescat
Crescat is industry-trusted event management software, built by event professionals for event professionals. Founded in 2017, we have three key products tailored for the live event industry.
Crescat Event for concert promoters and event agencies. Crescat Venue for music venues, conference centers, wedding venues, concert halls and more. And Crescat Festival for festivals, conferences and complex events.
With a wide range of popular features such as event scheduling, shift management, volunteer and crew coordination, artist booking and much more, Crescat is designed for customisation and ease-of-use.
Over 125,000 events have been planned in Crescat and with hundreds of customers of all shapes and sizes, from boutique event agencies through to international concert promoters, Crescat is rigged for success. What's more, we highly value feedback from our users and we are constantly improving our software with updates, new features and improvements.
If you plan events, run a venue or produce festivals and you're looking for ways to make your life easier, then we have a solution for you. Try our software for free or schedule a no-obligation demo with one of our product specialists today at crescat.io
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j
Dr. Jesús Barrasa, Head of Solutions Architecture for EMEA, Neo4j
Découvrez les dernières innovations de Neo4j, et notamment les dernières intégrations cloud et les améliorations produits qui font de Neo4j un choix essentiel pour les développeurs qui créent des applications avec des données interconnectées et de l’IA générative.
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
Utilocate offers a comprehensive solution for locate ticket management by automating and streamlining the entire process. By integrating with Geospatial Information Systems (GIS), it provides accurate mapping and visualization of utility locations, enhancing decision-making and reducing the risk of errors. The system's advanced data analytics tools help identify trends, predict potential issues, and optimize resource allocation, making the locate ticket management process smarter and more efficient. Additionally, automated ticket management ensures consistency and reduces human error, while real-time notifications keep all relevant personnel informed and ready to respond promptly.
The system's ability to streamline workflows and automate ticket routing significantly reduces the time taken to process each ticket, making the process faster and more efficient. Mobile access allows field technicians to update ticket information on the go, ensuring that the latest information is always available and accelerating the locate process. Overall, Utilocate not only enhances the efficiency and accuracy of locate ticket management but also improves safety by minimizing the risk of utility damage through precise and timely locates.
Hand Rolled Applicative User ValidationCode KataPhilip Schwarz
Could you use a simple piece of Scala validation code (granted, a very simplistic one too!) that you can rewrite, now and again, to refresh your basic understanding of Applicative operators <*>, <*, *>?
The goal is not to write perfect code showcasing validation, but rather, to provide a small, rough-and ready exercise to reinforce your muscle-memory.
Despite its grandiose-sounding title, this deck consists of just three slides showing the Scala 3 code to be rewritten whenever the details of the operators begin to fade away.
The code is my rough and ready translation of a Haskell user-validation program found in a book called Finding Success (and Failure) in Haskell - Fall in love with applicative functors.
E-commerce Application Development Company.pdfHornet Dynamics
Your business can reach new heights with our assistance as we design solutions that are specifically appropriate for your goals and vision. Our eCommerce application solutions can digitally coordinate all retail operations processes to meet the demands of the marketplace while maintaining business continuity.
6. UNIT VS. INTEGRATION TESTING
Unit Testing
• Testing a unit in isolation
Integration Testing
• Testing the collaboration of
multiple units
https://leanpub.com/integrationtest/
6
10. UNIT + INTEGRATION TESTING
Take a prototype car on a
test drive having tested
only nuts and bolts?
Manufacture a car having
tested nuts and bolts but
without having tested it on
numerous test drives?
https://leanpub.com/integrationtest/
10
11. SYSTEM UNDER TEST
SUT is what get tested
Techniques from Unit
Testing can be re-used
• Dependency Injection
• Test doubles
https://leanpub.com/integrationtest/
11
13. TESTING IS ABOUT ROI
The larger the SUT
• The more fragile the test
• The less maintainable the
test
• The less the ROI
https://leanpub.com/integrationtest/
13
14. TESTING IS ABOUT ROI
Tests have to be
organized in a certain way
• The bigger the SUT
• The less the number of
tests
https://leanpub.com/integrationtest/
14
15. TESTING IS ABOUT ROI
Integration Testing
• Test nominal cases
https://leanpub.com/integrationtest/
15
20. INTEGRATION TESTS ARE STILL SLOW
Separating IT doesn’t
make them faster
But errors can be
uncovered faster
• Fail fast
• It will speed testing
https://leanpub.com/integrationtest/
20
21. HOW TO SEPARATE?
Depends on the build
tool
• Ant
• Maven
• Gradle
• Something else?
https://leanpub.com/integrationtest/
21
27. CONTINUOUS INTEGRATION
Unit Tests run at each
commit
Integration Tests run
“regularly”
• Daily
• Hourly
• Depending on the context
https://leanpub.com/integrationtest/
27
28. Y U FRAGILE?
Usage of infrastructure
resources
• External
• Multiple
https://leanpub.com/integrationtest/
28
35. MANAGING THE GAP RISK
https://leanpub.com/integrationtest/
35
In-memory databases
are easy to setup
h2 is such a database
• Compatibility modes for
most widespread DB
• jdbc:h2:mem:test;
MODE=Oracle
36. WEB SERVICES:
COPING WITH FRAGILITY
https://leanpub.com/integrationtest/
36
Web Services as
infrastructure resources
• Hosted on-site
• Or outside
Different architectures
• REST(ful)
• SOAP
37. WEB SERVICES:
COPING WITH FRAGILITY
Use Fakes under your
control
https://leanpub.com/integrationtest/
37
38. FAKE RESTFUL WEB SERVICES
https://leanpub.com/integrationtest/
38
Spark
• Micro web framework
• A la Sinatra
• Very few lines of code
• Just serve static JSON files
42. SMARTBEAR SOAPUI
Has a GUI
Good documentation
Understands
• Authentication
• Headers
• Etc.
https://leanpub.com/integrationtest/
42
43. SOAPUI USAGE
Get WSDL
• Either online
• Or from a file
Create MockService
• Craft the adequate response
Run the service
Point the dependency to
localhost
https://leanpub.com/integrationtest/
43
44. CHALLENGES TO THE PREVIOUS SCENARIO
Craft the adequate response?
• More likely get one from the real WS
• And tweak it
Running in an automated way
• Save the project
• Get the SOAPUI jar
• Read the project and launch
46. FAKING WEB SERVICE IN REAL-LIFE
Use the same rules as for UT
• Keep validation simple
• Test one thing
Keep setup simple
• Don’t put complex logic
• OK to duplicate setup in each
test
• Up to a point
Author:I,rolfB
https://leanpub.com/integrationtest/
46
53. EXAMPLE: DATASOURCE CONFIGURATION
@Bean
public DataSource ds() {
JndiDataSourceLookup lookup = new JndiDataSourceLookup();
lookup.setResourceRef(true);
return lookup.getDataSource("jdbc/MyDS");
}
@Bean
public DataSource ds() {
org.apache.tomcat.jdbc.pool.DataSource ds
= new org.apache.tomcat.jdbc.pool.DataSource();
ds.setDriverClassName("org.h2.Driver");
ds.setUrl("jdbc:h2:~/test");
ds.setUsername("sa");
ds.setMaxActive(1);
return ds;
}
https://leanpub.com/integrationtest/
53
54. FRAGMENT STRUCTURE
Main fragment
• Repository
• Service
• etc.
Prod DB
fragment
Test DB fragment
https://leanpub.com/integrationtest/
54
55. TIPS
Prevent coupling
• Use top-level assembly instead
of fragment references
Pool exhaustion check
• Set the maximum number of
connections in the pool to 1
Compile-time safety
• Use JavaConfig
https://leanpub.com/integrationtest/
55
56. NOW, HOW TO TEST?
https://leanpub.com/integrationtest/
56
Spring Test
• Integration with
widespread testing
frameworks
57. SAMPLE TESTNG TEST WITH SPRING
@ContextConfiguration(
classes = { MainConfig.class, TestDataSourceConfig.class }
)
@RunWith(SpringJUnit4ClassRunner.class)
public class OrderIT {
@Autowired
private OrderService orderService;
@Test
public void should_do_this_and_that() {
orderService.order();
Assert.assertThat(...)
}
}
https://leanpub.com/integrationtest/
57
58. TESTING WITH THE DATABASE
Transactions
• Bound to business feature
• Implemented on Service
layer
• @Transactional
https://leanpub.com/integrationtest/
58
59. TRANSACTION MANAGEMENT TIP
When tests fail
• How to audit state?
• Spring rollbacks
transactions
@Commit
https://leanpub.com/integrationtest/
59
skinparam dpi 150
class A
package "System Under Test" {
class B
class C
}
package database <<Database>> {
class D
}
A .right.> B
B .right.> C
C .right.> D
hide empty members