Lightning Talk by Ted Young What is Integration
Lightning Talk by Ted Young
What is Integration Testing?
Unit Versus Integration Tests Unit Test Integration Test Isolation Entire Stack
Unit Versus Integration Tests Unit Test Integration Test Isolation Entire Stack Inject Mocks Inject Implementations
Unit Versus Integration Tests Unit Test Integration Test Isolation Entire Stack Inject Mocks Inject Implementations Verifies Code Verifies Application
Unit Tests Aren’t Always Best public void persist(Foo foo) { entity. Manager. persist(foo); } public List<Foo> find() { return entity. Manager. create. Query("from Foo"). get. Result. List(); } public List<Foo> find. By. Name(String name) { Criteria. Builder cb = entity. Manager. get. Criteria. Builder(); Criteria. Query<Foo> query = cb. create. Query(Foo. class); Root<Foo> root = query. from(Foo. class); query. where(cb. equal(root. get(Foo_. name), name)); return entity. Manager. create. Query(query). get. Result. List(); }
Integration Testing Controllers External Tool (e. g. JMeter) Test Harness (e. g. JUnit) External Tool IDE, Maven, CI, etc.
Integration Testing Controllers External Tool (e. g. JMeter) Test Harness (e. g. JUnit) External Tool IDE, Maven, CI, etc. Script Actions Build Requests in Java
Integration Testing Controllers External Tool (e. g. JMeter) Test Harness (e. g. JUnit) External Tool IDE, Maven, CI, etc. Script Actions Build Requests in Java No Knowledge of Application Intimate 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 Tool IDE, Maven, CI, etc. Script Actions Build Requests in Java No Knowledge of Application Intimate Knowledge of Application: • Security System • Data Model • Make Use of Spring Refactor = Rewrite Make Use of IDE Tools
Integration Testing Controllers External Tool (e. g. JMeter) Test Harness (e. g. JUnit) External Tool IDE, Maven, CI, etc. Script Actions Build Requests in Java No Knowledge of Application Intimate Knowledge of Application: • Security System • Data Model • Make Use of Spring Refactor = Rewrite Make Use of IDE Tools Errors at Runtime Errors at Compiletime
Testing a Controller Servlet Container
Testing a Spring MVC Controller Spring MVC Servlet Container
Testing a Spring MVC Controller Transactions Spring MVC View Resolution Servlet Container Request Mapping
Testing a Spring MVC Controller Transactions Spring MVC View Resolution Request Mapping Dispatcher. Servlet Container
Mocking Dispatcher. Servlet
Mocking Dispatcher. Servlet Web. Application. Context
Mocking Dispatcher. Servlet Web. Application. Context Servlet. Config Servlet. Context
Spring and JUnit @Run. With(Spring. JUnit 4 Class. Runner. class) @Context. Configuration(locations="classpath: spring. xml") public class Some. Controller. Tests {. . . }
Spring and JUnit @Run. With(Spring. JUnit 4 Class. Runner. class) @Context. Configuration( locations="classpath: spring. xml", loader=Mock. Web. Application. Context. Loader. class) public class Some. Controller. Tests {. . . }
Spring and JUnit @Run. With(Spring. JUnit 4 Class. Runner. class) @Context. Configuration( locations="classpath: spring. xml", loader=Mock. Web. Application. Context. Loader. class) @Mock. Web. Application( name="some-controller", webapp="/src/main/webapp") public class Some. Controller. Tests {. . . }
View Technologies How Many Use: • JSPs • Velocity • Freemarker • Facelets
An Example Test @Autowired private Dispatcher. Servlet servlet; @Autowired private Some. Repository repository; @Test public void view. Test() throws Exception { Mock. Http. Servlet. Request request = new Mock. Http. Servlet. Request ("GET", "/view"); request. add. Parameter ("id", "0"); Mock. Http. Servlet. Response response = new Mock. Http. Servlet. Response (); servlet. service(request, response); String results = response. get. Content. As. String(). trim(); Assert. assert. Equals( "<html><body>Hello World!</body></html>" , results); }
Prepare and Review Model @Test public void save. Test() throws Exception { Mock. Http. Servlet. Request request = new Mock. Http. Servlet. Request("POST", "/"); request. add. Parameter("name", "Ted"); Mock. Http. Servlet. Response response = new Mock. Http. Servlet. Response(); servlet. service(request, response); Assert. assert. Equals("Ted", repository. find(1). get. Name()); }
Test Validation @Test(expected=Nested. Servlet. Exception. class) public void save. Failed. Test() throws Exception { Mock. Http. Servlet. Request request = new Mock. Http. Servlet. Request("POST", "/"); request. add. Parameter("name", ""); Mock. Http. Servlet. Response response = new Mock. Http. Servlet. Response(); servlet. service(request, response); }
Test Security @Test(expected=Nested. Servlet. Exception. class) public void secure. Failed. Test() throws Exception { Mock. Http. Servlet. Request request = new Mock. Http. Servlet. Request("GET", "/secure/view"); Mock. Http. Servlet. Response response = new Mock. Http. Servlet. Response(); servlet. service(request, response); }
Test Security @Test public void secure. Test() throws Exception { Security. Context. Holder. get. Context(). set. Authentication( new Username. Password. Authentication. Token( "Ted", "password")); Mock. Http. Servlet. Request request = new Mock. Http. Servlet. Request("GET", "/secure/view"); Mock. Http. Servlet. Response response = new Mock. Http. Servlet. Response(); servlet. service(request, response); String results = response. get. Content. As. String(). trim(); Assert. assert. Equals( "<html><body>Hello Ted!</body></html>", results); }
http: //tedyoung. me mail@tedyoung. me
- Slides: 28