Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to test a mocked JNDI datasource with Spring?

I am fairly new to Spring and wondering how to create JUnit tests that use a mocked datasource and how to use a JNDI context with that? Currently my application uses a JNDI context from tomcat to retrieve a connection and via that connection retrieves data from a database. So I guess I need to mock the JNDI calls and the data retrieval. Any good pointers on what the best way to tackle this would be great! Thanks a lot!

like image 934
Marco Avatar asked May 09 '11 18:05

Marco


People also ask

Which exception do you use to detect if a look up on a JNDI resources has failed?

If a resource reference does not exist in the application module, the JNDI lookup will fail with the javax. naming. NamingException mentioned above.

Why JNDI is used in Java?

JNDI, part of the J2EE specification, provides naming and directory functionality for Java applications. Because JNDI is defined independently of any specific naming or directory service implementation, it enables Java applications to access different naming and directory services using a single API.

How is JNDI defined?

The Java Naming and Directory Interface™ (JNDI) is an application programming interface (API) that provides naming and directory functionality to applications written using the Java™ programming language. It is defined to be independent of any specific directory service implementation.


1 Answers

You can use SimpleNamingContextBuilder to make a jndi datasource available to your tests:

    SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();     builder.bind("java:comp/env/jdbc/mydatasource", dataSource);     builder.activate(); 

https://fisheye.springsource.org/browse/spring-framework/spring-test/src/main/java/org/springframework/mock/jndi/SimpleNamingContextBuilder.java?hb=true

This isn't exactly mocking the datasource, but it does make the datasource available via jndi for your tests.

like image 88
prule Avatar answered Sep 21 '22 18:09

prule