Overview
Other MyFaces Extensions
- ExtVal
- Ext-Script
- [Orchestra]
- [Portlet Bridge]
Community
Development
Sponsorship
Your browser does not support iframes
This example shows how to setup an application for tests with cargo.
The example above has a special maven profile for cargo tests:
mvn clean install -Pcargo-examples
The JUnit/Cargo support module provided by CODI offers some helpers for easier testing.
@RunWith(JUnit4WithCargo.class) public class DemoTestCase extends AbstractSimpleCargoTest { // NOTE that new @Test means new WebClient means new WindowContext @Test public void checkSubmittedValueAfterNavigation() throws Exception { SimplePageInteraction pageInteraction = new SimplePageInteraction(getTestConfiguration()) //the default config .with(Pages.Page1.class) //adds view-config for /pages/page1.xhtml to the current context .with(Pages.Page2.class) //adds view-config for /pages/page2.xhtml to the current context .start(Pages.Page1.class); //start the test with /pages/page2.xhtml pageInteraction .useForm("form1") //activate form1 .setValue("form1:input1", "1") //set a value .click("form1:button1"); //click on a button pageInteraction .checkState(Pages.Page2.class); //check the result - due to a redirect we have a new url - also the window-id is checked .checkTextValue("output1", "1"); //check the value of a text output } }
In this case there is no CDI container bootstrapped for the test. So it's required to register view-configs manually.
@RunWith(JUnit4WithCargo.class) public class DemoTestCase extends AbstractContainerAwareCargoTest { @Inject private UserRepository userRepository; @Test public void testSimpleConversation() { SimplePageInteraction pageInteraction = new SimplePageInteraction(getTestConfiguration()) .start(Pages.Overview.class) .useDefaultForm(); String inputId = "userName"; pageInteraction.setValue(inputId, "CODI") .clickOk() .checkState(Pages.Result.class); pageInteraction.click("home") .checkState(Pages.Overview.class) .checkInputValue(inputId, "CODI"); pageInteraction.clickOk() .checkState(Pages.Result.class); pageInteraction.click("finish") .checkState(Pages.Overview.class) .checkInputValue(inputId, ""); assertEquals("CODI", this.userRepository.findByUserName("CODI").getUserName()); } }
The availability of dependency injection means that a CDI container is bootstrapped for every test-method. Therefore, it isn't required to register artifacts like view-configs manually.
Hint
For debugging tests it's important to understand that the test doesn't run in the same VM as the running application which is under test. That also means, if you use an in-memory database you can't inject e.g. a DAO to check the stored result. You have to use a permanent DB or you have to load and check a page which provides the result.
Start Jetty
mvn clean jetty:run-exploded -Pdebug-cargo-examples -Dmaven.test.skip=true
and afterwards it's possible to run the JUnit test in your IDE (in the debug-mode).