Added tests for service-locator pattern

Fix NPE when requested service is unknown
This commit is contained in:
Jeroen Meulemeester 2015-12-29 19:25:29 +01:00
parent fcfdbe71f5
commit a375b2d28b
2 changed files with 45 additions and 1 deletions

View File

@ -32,7 +32,9 @@ public class ServiceLocator {
*/
InitContext ctx = new InitContext();
serviceObj = (Service) ctx.lookup(serviceJndiName);
serviceCache.addService(serviceObj);
if (serviceObj != null) { // Only cache a service if it actually exists
serviceCache.addService(serviceObj);
}
return serviceObj;
}
}

View File

@ -0,0 +1,42 @@
package com.iluwatar.servicelocator;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Date: 12/29/15 - 19:07 PM
*
* @author Jeroen Meulemeester
*/
public class ServiceLocatorTest {
/**
* Verify if we just receive 'null' when requesting a non-existing service
*/
@Test
public void testGetNonExistentService() {
assertNull(ServiceLocator.getService("fantastic/unicorn/service"));
assertNull(ServiceLocator.getService("another/fantastic/unicorn/service"));
}
/**
* Verify if we get the same cached instance when requesting the same service twice
*/
@Test
public void testServiceCache() {
final String[] serviceNames = new String[]{
"jndi/serviceA", "jndi/serviceB"
};
for (final String serviceName : serviceNames) {
final Service service = ServiceLocator.getService(serviceName);
assertNotNull(service);
assertEquals(serviceName, service.getName());
assertTrue(service.getId() > 0); // The id is generated randomly, but the minimum value is '1'
assertSame(service, ServiceLocator.getService(serviceName));
}
}
}