From 45409cfd6dc91abf698be693d91d6fd61f569c16 Mon Sep 17 00:00:00 2001 From: Geneva Coding Dojo Date: Wed, 2 Nov 2011 13:24:56 +0100 Subject: [PATCH] Code created by the November 2nd Coding Dojo session --- .../service/impl/ProviderServiceImpl.java | 5 +- .../impl/ServiceRegistrator.java | 2 +- .../impl/SampleServiceImplTest.java | 1 - .../ServiceRegistratorTest.java | 89 +++++++++++++++++++ 4 files changed, 91 insertions(+), 6 deletions(-) create mode 100644 Exercice-4/src/test/java/ch/genevajug/crappy/serviceregistrator/ServiceRegistratorTest.java diff --git a/Exercice-4/src/main/java/ch/genevajug/crappy/providerservice/service/impl/ProviderServiceImpl.java b/Exercice-4/src/main/java/ch/genevajug/crappy/providerservice/service/impl/ProviderServiceImpl.java index b318a81..42f40e3 100644 --- a/Exercice-4/src/main/java/ch/genevajug/crappy/providerservice/service/impl/ProviderServiceImpl.java +++ b/Exercice-4/src/main/java/ch/genevajug/crappy/providerservice/service/impl/ProviderServiceImpl.java @@ -27,10 +27,7 @@ /** * A simple implementation of the providers service. This is the class that's - * going to be tested using PowerMock. The main reason for the test is to - * demonstrate how to use PowerMock to set internal state (i.e. setting the - * providerDao field without setters), partial mocking and - * expectations of private methods. + * going to be tested using PowerMock. */ public class ProviderServiceImpl implements ProviderService { diff --git a/Exercice-4/src/main/java/ch/genevajug/crappy/serviceregistor/impl/ServiceRegistrator.java b/Exercice-4/src/main/java/ch/genevajug/crappy/serviceregistor/impl/ServiceRegistrator.java index 60289d1..5d2a33e 100644 --- a/Exercice-4/src/main/java/ch/genevajug/crappy/serviceregistor/impl/ServiceRegistrator.java +++ b/Exercice-4/src/main/java/ch/genevajug/crappy/serviceregistor/impl/ServiceRegistrator.java @@ -57,7 +57,7 @@ public long registerService(String name, Object serviceImplementation) { return id; } - /** + /** Mock for ServiceRegistratio * {@inheritDoc} */ public void unregisterService(long id) { diff --git a/Exercice-4/src/test/java/ch/genevajug/crappy/sampleservice/impl/SampleServiceImplTest.java b/Exercice-4/src/test/java/ch/genevajug/crappy/sampleservice/impl/SampleServiceImplTest.java index ed54cdb..aaca209 100644 --- a/Exercice-4/src/test/java/ch/genevajug/crappy/sampleservice/impl/SampleServiceImplTest.java +++ b/Exercice-4/src/test/java/ch/genevajug/crappy/sampleservice/impl/SampleServiceImplTest.java @@ -86,6 +86,5 @@ public void shouldThrowSampleServiceExceptionWhenPersonInstantiationFailed() thr verifyZeroInteractions(personService); verifyZeroInteractions(eventService); } - } } diff --git a/Exercice-4/src/test/java/ch/genevajug/crappy/serviceregistrator/ServiceRegistratorTest.java b/Exercice-4/src/test/java/ch/genevajug/crappy/serviceregistrator/ServiceRegistratorTest.java new file mode 100644 index 0000000..0333084 --- /dev/null +++ b/Exercice-4/src/test/java/ch/genevajug/crappy/serviceregistrator/ServiceRegistratorTest.java @@ -0,0 +1,89 @@ +package ch.genevajug.crappy.serviceregistrator; + +import ch.genevajug.crappy.hello.SimpleConfig; +import ch.genevajug.crappy.serviceregistor.impl.IdGenerator; +import ch.genevajug.crappy.serviceregistor.impl.ServiceRegistrator; +import ch.genevajug.crappy.serviceregistor.osgi.BundleContext; +import ch.genevajug.crappy.serviceregistor.osgi.ServiceRegistration; +import org.fest.assertions.Assertions; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.reflect.Whitebox; + +import java.util.HashMap; +import java.util.Map; + +import static org.fest.assertions.Assertions.assertThat; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.*; +import static org.powermock.reflect.Whitebox.getInternalState; +import static org.powermock.reflect.Whitebox.setInternalState; + +/** + * Created by IntelliJ IDEA. + * User: codingdojo + * Date: 11/2/11 + * Time: 12:26 PM + * To change this template use File | Settings | File Templates. + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest(IdGenerator.class) +public class ServiceRegistratorTest { + + @Mock + BundleContext bundleContext; + + @InjectMocks + ServiceRegistrator serviceRegistrator = new ServiceRegistrator(); + + @Test + public void shouldAddServiceRegistrationToTheMap() { + Object serviceImplementation = mock(Object.class); + ServiceRegistration serviceRegistration = mock(ServiceRegistration.class); + PowerMockito.mockStatic(IdGenerator.class); + + when(bundleContext.registerService(eq("Test"), eq(serviceImplementation), anyString())).thenReturn(serviceRegistration); + when(IdGenerator.generateNewId()).thenReturn(100L); + + long id = serviceRegistrator.registerService("Test", serviceImplementation); + + Map serviceRegistrationsMap = getInternalState(serviceRegistrator, Map.class); + + assertThat(id).isEqualTo(100L); + assertThat(serviceRegistrationsMap).hasSize(1); + assertThat(serviceRegistrationsMap.get(100L)).isEqualTo(serviceRegistration); + } + + @Test + public void mapShouldBeEmptyAfterUnregistration() { + ServiceRegistration serviceRegistration = mock(ServiceRegistration.class); + Map serviceRegistrationsMap = new HashMap(); + serviceRegistrationsMap.put(100L, serviceRegistration); + + setInternalState(serviceRegistrator, serviceRegistrationsMap); + + serviceRegistrator.unregisterService(100L); + + assertThat(serviceRegistrationsMap).isEmpty(); + verify(serviceRegistration, times(1)).unregister(); + } + + + @Test(expected = IllegalStateException.class) + public void shouldThrowIllegalExceptionWhenIdNotFound() { + Map serviceRegistrationsMap = mock(Map.class); + when(serviceRegistrationsMap.get(100L)).thenReturn(null); + + setInternalState(serviceRegistrator, serviceRegistrationsMap); + + serviceRegistrator.unregisterService(100L); + } +}