Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Embracing JUnit 5 with Eclipse - Eclipse Converge NA, March 2017

5,648 views

Published on

An updated version is available here: https://www.slideshare.net/NoopurGupta6/embracing-junit-5-with-eclipse-eclipsecon-europe-october-2017.

Writing good tests is as important as writing good code for mastering high-quality software development. The JUnit framework is one of the most valuable skills a developer can learn to achieve that. JUnit 4.0 was first released over a decade ago after the introduction of annotations in Java 5. The world of Java and testing has evolved a lot since then. To take advantage of the new features like lambda expressions in Java 8 and to support the advanced testing needs, JUnit 5 is emerging as the next generation test framework. Eclipse is embracing it by integrating the new features provided by JUnit 5 in its tooling support.

In this session, I will demo how to get started with JUnit 5 in Eclipse and how the new features in JUnit 5 blend with the existing functionality in Eclipse. Some of the features from JUnit 5 that you will see in action include:

* Custom display names
* Custom composed annotations
* Lambda expressions for assertions and assumptions
* Grouping assertions
* Nested tests
* Dependency injection for constructors and methods
* Dynamic tests
* Implementing tests via interface default methods

This session is not intended to provide a deep dive into JUnit 5. Come here and get a glimpse of the goodies provided by Eclipse as part of its JUnit 5 support.

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Embracing JUnit 5 with Eclipse - Eclipse Converge NA, March 2017

  1. 1. Noopur Gupta Eclipse JDT UI co-lead IBM India noopur_gupta@in.ibm.com Embracing with 1 @noopur2507 Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  2. 2.  JUnit 4.0 Released in 2006  JUnit 5.0 Release in Q3 2017 (expected) 2 Source: http://blog.takipi.com/the-top-100-java-libraries-in-2016-after-analyzing-47251-dependencies/ JUnit Framework Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  3. 3. JUnit 4 Architecture Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM 3 junit.jar (Single JUnit 4 JAR) Testing frameworks developers Build tools developers IDEs developers @Test developers Problems Modularity (single JAR) Developers accessing internals and duplicating code Maintainability Extensibility (via Runners and Rules) Java 8 support (Lambdas, Streams, Default Methods etc.) (+ org.hamcrest.core.jar)
  4. 4. 4 JUnit 5 Architecture JUnit 5 = Platform + Jupiter + Vintage 5th planet in Solar System! Source: (JUnit 5 M3 User Guide) http://junit.org/junit5/docs/current/user-guide/#dependency-diagram Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  5. 5. 5 JUnit 5 Architecture  JUnit Platform ▪ junit-platform-launcher Launcher APIs used by IDEs and build tools to launch the framework. Finds test engines via Java’s ServiceLoader mechanism. ▪ junit-platform-engine TestEngine APIs for integration of any testing framework like JupiterTestEngine. ▪ …  JUnit Jupiter ▪ junit-jupiter-api APIs for the new programming and extension model. ▪ junit-jupiter-engine To discover and execute Jupiter tests.  JUnit Vintage ▪ junit-vintage-engine To discover and execute JUnit 3 and JUnit 4 tests on JUnit 5 platform. Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  6. 6. A sneak peek into the major interesting features of JUnit Jupiter with Eclipse beta support for JUnit 5. 6Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  7. 7. Eclipse beta support for JUnit 5 7 Follow the steps provided in the wiki to setup JUnit 5 support in Eclipse. Demo: Eclipse 4.7 M6 build with JUnit 5 support based on JUnit 5 M3 release (using JUnit5-20170313-snapshot JARs). Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  8. 8. Demo JUnit Jupiter - Programming Model 8Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  9. 9. Demo Create new JUnit Jupiter test in Eclipse with setUp and tearDown methods for a class and its methods being tested: 9 New JUnit Test Case wizard > New JUnit Jupiter test Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  10. 10. Demo Add JUnit 5 library to the build path 10 ➢ New JUnit Test Case wizard offers to add it while creating a new JUnit Jupiter test. ➢ Quick Fix (Ctrl+1) proposal on @Test. Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  11. 11. 11 Demo • Visibility: Test classes and methods can have any access modifier (other than private). • Annotations JUnit 4 JUnit 5 @org.junit.Test @org.junit.jupiter.api.Test (No expected and timeout attributes) @BeforeClass @BeforeAll @AfterClass @AfterAll @Before @BeforeEach @After @AfterEach @Ignore @Disabled Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  12. 12. Demo Create a JUnit Jupiter test method in Eclipse with the new template: 12 test5 Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  13. 13. 13 Demo - Assertions (org.junit.jupiter.api.Assertions class) • Failure message comes at the end of arguments list. • Failure message can be retrieved lazily. • Grouped assertions to execute all assertions first and then report all failures together. • Exception testing to assert and evaluate a thrown exception. • Asserting that the given task completes before the given timeout. Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  14. 14. 14 Demo - Assumptions (org.junit.jupiter.api.Assumptions class) Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  15. 15. Demo JUnit Jupiter’s Assertions, Assumptions & DynamicTest classes are now added to Eclipse Favorites by default. Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM 15 Preferences > Java > Editor > Content Assist > Favorites Import static methods in your code from favorite classes via Content Assist (Ctrl + Space) and Quick Fix (Ctrl + 1). Configure the number of static member imports needed before type.* is used.
  16. 16. 16 Demo - @DisplayName Provide custom display names for test classes and test methods -  with spaces, special characters, and even emojis! Use "Go to File" action or just double-click to navigate to the test from JUnit view. Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  17. 17. 17 Demo - @Nested Test Classes Non-static nested classes (i.e. inner classes) can serve as @Nested tests for logical grouping of test cases. Example: TestingAStackDemo in JUnit 5 user guide. Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  18. 18. 18 Demo - Interface Default Methods • Default test methods can be inherited by implementing test classes. • Enables multiple inheritance in tests classes. Example: StringTests in JUnit 5 user guide. Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  19. 19. 19 Demo - Tagging, Meta-Annotations and Composed Annotations • Tag test classes and test methods with @Tag. Tags can later be used to filter test execution. • JUnit Jupiter annotations can be used as meta-annotations. • Create custom composed annotation inheriting semantics of its meta-annotations. Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  20. 20. 20 Demo - Dynamic Tests • Dynamic tests are generated at runtime by a @TestFactory method. Create a @TestFactory method in Eclipse with the new template: • Dynamic test is composed of a display name and an Executable. testfactory Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  21. 21. 21 Demo - Navigate to failing source location Double-click an entry in JUnit view’s failure trace to jump to the corresponding source location. Click "Show Stack Trace in Console View" and use the hyperlinks. It can also be used to copy parts of the stack trace. Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  22. 22. 22 Demo – Dependency injection • Test constructors and methods are now permitted to have parameters enabling Dependency Injection. • ParameterResolver is the extension API to provide a parameter resolver which dynamically resolves a parameter at runtime. • Two built-in resolvers by JUnit Jupiter that are registered automatically: ▪ TestInfoParameterResolver for parameter type TestInfo ▪ TestReporterParameterResolver for parameter type TestReporter Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  23. 23. JUnit Jupiter - Extension Model See the JUnit 5 User Guide for more details. 23  Provides extension points as interfaces in org.junit.jupiter.api.extension package to be implemented by extension providers.  Register one or more extensions on a test class, test method, or composed annotation with @ExtendWith(…). Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  24. 24. Resources ➢ JUnit 5 Project http://junit.org/junit5 ▪ User Guide http://junit.org/junit5/docs/current/user-guide ▪ Javadoc http://junit.org/junit5/docs/current/api ▪ GitHub https://github.com/junit-team/junit5 ▪ Q&A http://stackoverflow.com/questions/tagged/junit5 ➢ Eclipse support for JUnit 5 https://wiki.eclipse.org/JDT_UI/JUnit_5 24Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  25. 25. Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM 25Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  26. 26. Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM
  27. 27. Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM 27 Eclipse Converge 2017 | Embracing JUnit 5 with Eclipse | Noopur Gupta, IBM

×