diff --git a/business-delegate/pom.xml b/business-delegate/pom.xml index cfd7d6e5d..d07f2c0ae 100644 --- a/business-delegate/pom.xml +++ b/business-delegate/pom.xml @@ -15,5 +15,10 @@ junit test + + org.mockito + mockito-core + test + diff --git a/business-delegate/src/main/java/com/iluwatar/business/delegate/App.java b/business-delegate/src/main/java/com/iluwatar/business/delegate/App.java index c900f7366..371ec3ce4 100644 --- a/business-delegate/src/main/java/com/iluwatar/business/delegate/App.java +++ b/business-delegate/src/main/java/com/iluwatar/business/delegate/App.java @@ -1,31 +1,34 @@ package com.iluwatar.business.delegate; /** - * * The Business Delegate pattern adds an abstraction layer between the presentation and business * tiers. By using the pattern we gain loose coupling between the tiers. The Business Delegate * encapsulates knowledge about how to locate, connect to, and interact with the business objects * that make up the application. - *

- * Some of the services the Business Delegate uses are instantiated directly, and some can be + * + *

Some of the services the Business Delegate uses are instantiated directly, and some can be * retrieved through service lookups. The Business Delegate itself may contain business logic too * potentially tying together multiple service calls, exception handling, retrying etc. - *

- * In this example the client ({@link Client}) utilizes a business delegate ( + * + *

In this example the client ({@link Client}) utilizes a business delegate ( * {@link BusinessDelegate}) to execute a task. The Business Delegate then selects the appropriate * service and makes the service call. - * */ public class App { /** - * Program entry point - * + * Program entry point. + * * @param args command line args */ public static void main(String[] args) { BusinessDelegate businessDelegate = new BusinessDelegate(); + BusinessLookup businessLookup = new BusinessLookup(); + businessLookup.setEjbService(new EjbService()); + businessLookup.setJmsService(new JmsService()); + + businessDelegate.setLookupService(businessLookup); businessDelegate.setServiceType(ServiceType.EJB); Client client = new Client(businessDelegate); diff --git a/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessDelegate.java b/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessDelegate.java index b8a70aa0e..a3c9a00e7 100644 --- a/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessDelegate.java +++ b/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessDelegate.java @@ -1,22 +1,24 @@ package com.iluwatar.business.delegate; /** - * * BusinessDelegate separates the presentation and business tiers - * */ public class BusinessDelegate { - private BusinessLookup lookupService = new BusinessLookup(); - private BusinessService businessService; - private ServiceType serviceType; + private BusinessLookup lookupService; + private BusinessService businessService; + private ServiceType serviceType; - public void setServiceType(ServiceType serviceType) { - this.serviceType = serviceType; - } + public void setLookupService(BusinessLookup businessLookup) { + this.lookupService = businessLookup; + } - public void doTask() { - businessService = lookupService.getBusinessService(serviceType); - businessService.doProcessing(); - } + public void setServiceType(ServiceType serviceType) { + this.serviceType = serviceType; + } + + public void doTask() { + businessService = lookupService.getBusinessService(serviceType); + businessService.doProcessing(); + } } diff --git a/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessLookup.java b/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessLookup.java index 7cea16580..310f7f433 100644 --- a/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessLookup.java +++ b/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessLookup.java @@ -1,17 +1,31 @@ package com.iluwatar.business.delegate; /** - * - * Class for performing service lookups - * + * Class for performing service lookups. */ public class BusinessLookup { + private EjbService ejbService; + + private JmsService jmsService; + + /** + * @param serviceType Type of service instance to be returned. + * @return Service instance. + */ public BusinessService getBusinessService(ServiceType serviceType) { if (serviceType.equals(ServiceType.EJB)) { - return new EjbService(); + return ejbService; } else { - return new JmsService(); + return jmsService; } } + + public void setJmsService(JmsService jmsService) { + this.jmsService = jmsService; + } + + public void setEjbService(EjbService ejbService) { + this.ejbService = ejbService; + } } diff --git a/business-delegate/src/test/java/com/iluwatar/business/delegate/AppTest.java b/business-delegate/src/test/java/com/iluwatar/business/delegate/AppTest.java deleted file mode 100644 index 5ff7e6784..000000000 --- a/business-delegate/src/test/java/com/iluwatar/business/delegate/AppTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.iluwatar.business.delegate; - -import org.junit.Test; - -import com.iluwatar.business.delegate.App; - -/** - * - * Application test - * - */ -public class AppTest { - - @Test - public void test() { - String[] args = {}; - App.main(args); - } -} diff --git a/business-delegate/src/test/java/com/iluwatar/business/delegate/BusinessDelegateTest.java b/business-delegate/src/test/java/com/iluwatar/business/delegate/BusinessDelegateTest.java new file mode 100644 index 000000000..ebacd6b78 --- /dev/null +++ b/business-delegate/src/test/java/com/iluwatar/business/delegate/BusinessDelegateTest.java @@ -0,0 +1,78 @@ +package com.iluwatar.business.delegate; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import org.junit.Before; +import org.junit.Test; + +/** + * The Business Delegate pattern adds an abstraction layer between the presentation and business + * tiers. By using the pattern we gain loose coupling between the tiers. The Business Delegate + * encapsulates knowledge about how to locate, connect to, and interact with the business objects + * that make up the application. + * + *

Some of the services the Business Delegate uses are instantiated directly, and some can be + * retrieved through service lookups. The Business Delegate itself may contain business logic too + * potentially tying together multiple service calls, exception handling, retrying etc. + */ +public class BusinessDelegateTest { + + private EjbService ejbService; + + private JmsService jmsService; + + private BusinessLookup businessLookup; + + private BusinessDelegate businessDelegate; + + /** + * This method sets up the instance variables of this test class. It is executed before the + * execution of every test. + */ + @Before + public void setup() { + ejbService = spy(new EjbService()); + jmsService = spy(new JmsService()); + + businessLookup = spy(new BusinessLookup()); + businessLookup.setEjbService(ejbService); + businessLookup.setJmsService(jmsService); + + businessDelegate = spy(new BusinessDelegate()); + businessDelegate.setLookupService(businessLookup); + } + + /** + * In this example the client ({@link Client}) utilizes a business delegate ( + * {@link BusinessDelegate}) to execute a task. The Business Delegate then selects the appropriate + * service and makes the service call. + */ + @Test + public void testBusinessDelegate() { + + // setup a client object + Client client = new Client(businessDelegate); + + // set the service type + businessDelegate.setServiceType(ServiceType.EJB); + + // action + client.doTask(); + + // verifying that the businessDelegate was used by client during doTask() method. + verify(businessDelegate).doTask(); + verify(ejbService).doProcessing(); + + // set the service type + businessDelegate.setServiceType(ServiceType.JMS); + + // action + client.doTask(); + + // verifying that the businessDelegate was used by client during doTask() method. + verify(businessDelegate, times(2)).doTask(); + verify(jmsService).doProcessing(); + } +}