Class BrowserlessTest

java.lang.Object
com.vaadin.browserless.BaseBrowserlessTest
com.vaadin.browserless.BrowserlessTest
All Implemented Interfaces:
TesterWrappers

public abstract class BrowserlessTest extends BaseBrowserlessTest implements TesterWrappers
Base JUnit 6 class for browserless tests. The class automatically scans the classpath for routes and error views. Subclasses should typically restrict classpath scanning to specific packages for faster bootstrap by using the ViewPackages annotation. If the annotation is not present, a full classpath scan is performed.
 
 @ViewPackages(classes = { CartView.class, CheckoutView.class })
 class CartViewTest extends BrowserlessTest {
 }

 @ViewPackages(packages = { "com.example.shop.cart", "com.example.security" })
 class CartViewTest extends BrowserlessTest {
 }

 @ViewPackages(classes = { CartView.class, CheckoutView.class }, packages = {
         "com.example.security" })
 class CartViewTest extends BrowserlessTest {
 }
 
 
The Vaadin environment is set up before each test by the initVaadinEnvironment() @BeforeEach method and cleaned up afterwards by the cleanVaadinEnvironment() @AfterEach method. Being instance lifecycle methods (rather than extension callbacks), they run after all JUnit 5 extension beforeEach callbacks, so the test can be combined with extensions that MockVaadin depends on ? for example a CDI container started by weld-junit5's @EnableAutoWeld, whose BeanManagerProvider must be in place before MockVaadin.setup() runs.

Usually it is not necessary to override initVaadinEnvironment() or cleanVaadinEnvironment(), but if it is done then the override must keep the @BeforeEach/@AfterEach annotation so the hook is still handled by the testing framework. A common reason to override initVaadinEnvironment() is to perform a custom MockVaadin.setup() ? for instance to register a CDI-aware servlet:

 
 @BeforeEach
 @Override
 protected void initVaadinEnvironment() {
     scanTesters();
     MockVaadin.setup(MockedUI::new, cdiVaadinServlet, lookupServices());
 }
 
 

To provide custom Flow service implementations via the Lookup SPI, override BaseBrowserlessTest.lookupServices():

 
 @Override
 protected Set<Class<?>> lookupServices() {
     return Set.of(CustomInstantiatorFactory.class);
 }
 
 

This class only supports the default per-method lifecycle. Tests that need a single Vaadin environment shared across all methods in the class should not extend it; instead register a BrowserlessClassExtension and, if the testing DSL is wanted directly on the test class, implement TesterWrappers (and optionally Locators):

 
 &#64;ViewPackages(classes = MyView.class)
 class MyStatefulTest implements TesterWrappers {
     &#64;RegisterExtension
     static BrowserlessClassExtension ext = new BrowserlessClassExtension();
 }
 
 

To get a graphical ASCII representation of the UI tree on failure, add @ExtendWith(TreeOnFailureExtension.class) to the test class.

See Also:
  • Constructor Details

    • BrowserlessTest

      public BrowserlessTest()
  • Method Details

    • initVaadinEnvironment

      @BeforeEach protected void initVaadinEnvironment()
      Description copied from class: BaseBrowserlessTest
      Create mocked Vaadin core obects, such as session, servlet populated with Routes, UI etc. for testing and find testers for the components.
      Overrides:
      initVaadinEnvironment in class BaseBrowserlessTest
    • cleanVaadinEnvironment

      @AfterEach protected void cleanVaadinEnvironment()
      Description copied from class: BaseBrowserlessTest
      Tears down mocked Vaadin.
      Overrides:
      cleanVaadinEnvironment in class BaseBrowserlessTest
    • testingEngine

      protected final String testingEngine()
      Description copied from class: BaseBrowserlessTest
      Gets the name of the Test Engine that is able to run the base class implementation. The Test Engine name is reported in the exception thrown when the Vaadin environment is not set up correctly.
      Specified by:
      testingEngine in class BaseBrowserlessTest
      Returns:
      name of the Test Engine.