vmassol 01/07/07 08:52:22 Modified: cactus/docs/framework/xdocs doc-book.xml index.xml site-book.xml Added: cactus/docs/framework/xdocs cactusv2.xml Log: addition of a proposal for Cactus v2 Revision Changes Path 1.15 +1 -0 jakarta-commons/cactus/docs/framework/xdocs/doc-book.xml Index: doc-book.xml =================================================================== RCS file: /home/cvs/jakarta-commons/cactus/docs/framework/xdocs/doc-book.xml,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- doc-book.xml 2001/07/05 12:57:54 1.14 +++ doc-book.xml 2001/07/07 15:52:22 1.15 @@ -29,6 +29,7 @@ <menu label="Design"> <menu-item label="Architecture" source="architecture.xml"/> <menu-item label="Mock vs Container" source="mockobjects.xml"/> + <menu-item label="Cactus v2 proposal" source="cactusv2.xml"/> </menu> <menu label="User Guides"> 1.17 +9 -0 jakarta-commons/cactus/docs/framework/xdocs/index.xml Index: index.xml =================================================================== RCS file: /home/cvs/jakarta-commons/cactus/docs/framework/xdocs/index.xml,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- index.xml 2001/07/05 12:57:55 1.16 +++ index.xml 2001/07/07 15:52:22 1.17 @@ -47,6 +47,15 @@ <table> <tr> <td> + 07/07/2001 + </td> + <td> + <link href="cactusv2.html">Proposal for Cactus v2</link>. + Please give us your feedback. + </td> + </tr> + <tr> + <td> 05/07/2001 </td> <td> 1.14 +1 -0 jakarta-commons/cactus/docs/framework/xdocs/site-book.xml Index: site-book.xml =================================================================== RCS file: /home/cvs/jakarta-commons/cactus/docs/framework/xdocs/site-book.xml,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- site-book.xml 2001/07/05 12:57:57 1.13 +++ site-book.xml 2001/07/07 15:52:22 1.14 @@ -29,6 +29,7 @@ <menu label="Design"> <menu-item label="Architecture" source="architecture.xml"/> <menu-item label="Mock vs Container" source="mockobjects.xml"/> + <menu-item label="Cactus v2 proposal" source="cactusv2.xml"/> </menu> <menu label="User Guides"> 1.1 jakarta-commons/cactus/docs/framework/xdocs/cactusv2.xml Index: cactusv2.xml =================================================================== <?xml version="1.0"?> <!DOCTYPE document SYSTEM "./dtd/document-v10.dtd"> <document> <header> <title>Proposal for Cactus V2</title> <authors> <person name="Vincent Massol" email="[EMAIL PROTECTED]"/> </authors> </header> <body> <s1 title="Forewords"> <p> This document is only a <strong>Proposal</strong> for Cactus v2. We'd like to have your feedback. You have the chance to influence the direction of Cactus, please do not hesitate to state your opinion (either positive or negative) on the <link href="mailinglist.html">Cactus mailing list</link>. </p> </s1> <s1 title="Goal/Rationale"> <p> The goal of Cactus v2 is to make it the framework of choice for testing server-side java code. Notice that this differs from Cactus v1 as the goal is now broader than just "unit test". Please note that the goal is _not_ to provide a framework for performing acceptance tests nor system integration tests, nor graphical regression tests, ... The goal is still to perform test from inside but rather to encompass unit tests and also functional tests. However, by functional test we mean to be able to assert the result of calling a single dynamically generated page and not a complete use case (HttpUnit style). Regarding unit tests, Cactus v2 will provide both <link href="mockobjects.html">Mock Object</link> style unit tests and in-container style unit tests (same as with Cactus v1). </p> <p> Why ? Why extend the scope ? One reason is that we see value in providing a single consistent framework for performing these tasks rather than having to use/learn several different frameworks (Mock Objects, Cactus, HttpUnit, ...). The other reason is that you have been several to request these features on the Cactus mailing list for the past months. Another reason is that in-container style tests are not a best-for-all solution and is nicely complemented by mock objects style tests (or the other round !) and functional tests. </p> <p> Testing server-side code implies the following different kind of tests: </p> <ul> <li> <strong>Business Logic unit tests</strong> : this will be tested using the mock object test features of Cactus, </li> <li> <strong>Container interaction tests</strong> : this will be tested using the in-container test features of Cactus, </li> <li> <strong>Test the interaction between client side code and server side code</strong> (to test for example that cookies sent by the client side can be read on the server side, ...) : this will be tested using the functional test features of Cactus, </li> <li> <strong>Test the results</strong> (i.e. validate that the pages returned to the client side contain the correct data) : this will be tested using the functional test features of Cactus, </li> <li> <strong>Test the deployment of the code</strong> (i.e. verify that the web.xml is correctly defined, ...) : this will be tested using both the in-container and functional test features of Cactus </li> </ul> <p> Consequently, we can see that the goal of Cactus will be to fully test, in a comprehensive manner, the server-side code. Cactus will provide these features in a very flexible way, meaning that it will be possible for each test case to exercise only one kind of test (as defined above) or to exercise all the tests at once. </p> <p> Most importantly, there will be only one format for writing test cases that will work for all the different kind of tests, thus preventing the user from having to learn different formats and also providing maximum flexibility for combining the different kind of tests. </p> <p> Another very important goal of Cactus will be to also provide a methodology for performing server side tests. It will explain when to write which kind of test and how it will integrate in the development environment and within the build and deployment processes. </p> </s1> <s1 title="TestCase format"> <p> A test case will still be a JUnit test case, meaning that all tools that run JUnit test cases will also run Cactus test cases. </p> <p> A test case will have to extend a Cactus class (ServletTestCase for testing classes in the servlet environment). </p> <p> Each test case will be allowed to define a <code>beginXXX()</code> method. In this method, you will be able to define all the client side environment for the test, i.e. set HTTP paramater that you will retrieve in the Servlet request, cookies, HTTP headers, forms to send, ... Everything that Cactus v1 was offering will still be there and additional useful methods will be added (see HttpUnit). There will still be methods to simulate a URL as in Cactus v1. </p> <p> In addition, there will be a method to define the URL that will be used to connect to the server code. Depending on the kind of test you want to perform, it will be set to : </p> <ul> <li> A redirector servlet for in-container tests. Note that it will be possible to define several redirector servlets in the web.xml file so that different configuration could be used, </li> <li> The page to test for functional tests. For example, if you wish to test the result of the execution of a JSP, you will put the URL to this JSP. [Note that it is possible to combine in-container tests with functional tests by setting this URL to a redirector servlet] </li> <li> Nothing for mock objects tests. No real HTTP connection will be made. </li> </ul> <p> Note that the <code>beginXXX()</code> method will be optional and if none is setup then the test will be a mock object test (as no URL will have been defined). </p> <p> Each test case will have a <code>testXXX()</code> method (for pure functional tests, this method will be empty). You will be able to initialize server side objects (like putting a value in the HTTP session, or adding an attribute to the page context, ...). This method will also contain the call to the method to unit test and will contain all the assert conditions for verifying object values on the server side. </p> <p> Each test case will be allowed to define a <code>endXXX()</code> method. This is where you will be able to verify what has been sent back by your server code. You will be able to verify cookies, HTTP headers, and all content of the returned data. The returned data will be exposed as a DOM and several methods will be provided to search for given elements (like get the second returned table and verify that the background color is such, ...) [same as HttpUnit]. </p> <p> In addition to these test cases, a web.xml file will have to be provided for in-container tests (to map the redirector servlet) and functional tests involving servlets, tag libs, ... </p> </s1> <s1 title="Conclusion"> <p> What would be really great would be to closely integrate with HttpUnit for the client side test features and the returned data validation. </p> <p> Please tell us what you think, whether this is a honorable goal or not, where you see big issues that will ba heard to overcome, ... </p> <p> Thanks again for your participation in this pioneer project in the realm of server side testing ! </p> </s1> </body> </document>