This is a simple test compiled to test simple features of  SCA

There are interfaces to different services that have been included

1. MyListService
2. MyListServiceByYear
3. MyService
4. MyServiceByDate
5. MyTotalservice

The service that has been used in the tests primarily is MyService/MyTotalService.
in the test cases.

There are three test cases and three composites (MySimppleService,Iteration1,Iteration3).

1. MySimpleServiceTestCase            - Checks if the components in MySimpleService.composite are initialized properly. 
                                        It tries to call simple functions implemented in MySimpleServiceImpl.
                             
2. MyTotalServiceTestCase             - Initializes the components in the Iteration3Composite.composite file.
                                        tries to call simple functions implemented in MyTotalServiceImpl.
                             
3. MySimpleServiceInRecursiveTestCase - Initializes the components in the  Iteration1Composite.composite file.
                                        It initializes its components using implementation:composite tag in the 
                                        composite file which points to MySimpleService.composite.
                                        The test case recursively calls functions initialized in MySimpleService.composite.
                                        

                                        
