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