Lightning Talk by Ted Young
What is Integration Testing?
Unit TestIntegration Test IsolationEntire Stack Unit Versus Integration Tests
Unit TestIntegration Test IsolationEntire Stack Inject MocksInject Implementations Unit Versus Integration Tests
Unit TestIntegration Test IsolationEntire Stack Inject MocksInject Implementations Verifies CodeVerifies Application Unit Versus Integration Tests
public void persist(Foo foo) { entityManager.persist(foo); } public List find() { return entityManager.createQuery("from Foo").getResultList(); } public List findByName(String name) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery query = cb.createQuery(Foo.class); Root root = query.from(Foo.class); query.where(cb.equal(root.get(Foo_.name), name)); return entityManager.createQuery(query).getResultList(); } Unit Tests Arent Always Best
External Tool (e.g. JMeter)Test Harness (e.g. JUnit) External ToolIDE, Maven, CI, etc. Integration Testing Controllers
External Tool (e.g. JMeter)Test Harness (e.g. JUnit) External ToolIDE, Maven, CI, etc. Script ActionsBuild Requests in Java Integration Testing Controllers
External Tool (e.g. JMeter)Test Harness (e.g. JUnit) External ToolIDE, Maven, CI, etc. Script ActionsBuild Requests in Java No Knowledge of ApplicationIntimate Knowledge of Application: Security System Data Model Make Use of Spring Integration Testing Controllers
External Tool (e.g. JMeter)Test Harness (e.g. JUnit) External ToolIDE, Maven, CI, etc. Script ActionsBuild Requests in Java No Knowledge of ApplicationIntimate Knowledge of Application: Security System Data Model Make Use of Spring Refactor = RewriteMake Use of IDE Tools Integration Testing Controllers
External Tool (e.g. JMeter)Test Harness (e.g. JUnit) External ToolIDE, Maven, CI, etc. Script ActionsBuild Requests in Java No Knowledge of ApplicationIntimate Knowledge of Application: Security System Data Model Make Use of Spring Refactor = RewriteMake Use of IDE Tools Errors at RuntimeErrors at Compiletime Integration Testing Controllers
Testing a Controller Servlet Container Controller
Testing a Spring MVC Controller Servlet Container Controller Spring MVC
Testing a Spring MVC Controller Servlet Container Controller Spring MVC View Resolution Transactions Request Mapping
Testing a Spring MVC Controller Servlet Container Controller Spring MVC View Resolution Transactions Request Mapping DispatcherServlet
Mocking DispatcherServlet DispatcherServlet
Mocking DispatcherServlet DispatcherServlet WebApplicationContext
Mocking DispatcherServlet DispatcherServlet WebApplicationContext ServletConfigServletContext
public class SomeControllerTests {... } Spring and JUnit
locations="classpath:spring.xml", loader=MockWebApplicationContextLoader.class) public class SomeControllerTests {... } Spring and JUnit
locations="classpath:spring.xml", name="some-controller", webapp="/src/main/webapp") public class SomeControllerTests {... } Spring and JUnit
How Many Use: JSPs Velocity Freemarker Facelets View Technologies
@Autowired private DispatcherServlet private SomeRepository public void viewTest() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest("GET", "/view"); request.addParameter("id", "0"); MockHttpServletResponse response = new MockHttpServletResponse(); servlet.service(request, response); String results = response.getContentAsString().trim(); Assert.assertEquals( " Hello World! ", results); } An Example Test
@Test public void saveTest() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest("POST", "/"); request.addParameter("name", "Ted"); MockHttpServletResponse response = new MockHttpServletResponse(); servlet.service(request, response); Assert.assertEquals("Ted", repository.find(1).getName()); } Prepare and Review Model
@Test(expected=NestedServletException.class) public void saveFailedTest() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest("POST", "/"); request.addParameter("name", ""); MockHttpServletResponse response = new MockHttpServletResponse(); servlet.service(request, response); } Test Validation
@Test(expected=NestedServletException.class) public void secureFailedTest() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest("GET", "/secure/view"); MockHttpServletResponse response = new MockHttpServletResponse(); servlet.service(request, response); } Test Security
@Test public void secureTest() throws Exception { SecurityContextHolder.getContext().setAuthentication( new UsernamePasswordAuthenticationToken( "Ted", "password")); MockHttpServletRequest request = new MockHttpServletRequest("GET", "/secure/view"); MockHttpServletResponse response = new MockHttpServletResponse(); servlet.service(request, response); String results = response.getContentAsString().trim(); Assert.assertEquals( " Hello Ted! ", results); } Test Security