@Test
  public void testLookupWhereBeanFactoryYieldsNonDataSourceType() throws Exception {
    final BeanFactory beanFactory = mock(BeanFactory.class);

    given(beanFactory.getBean(DATASOURCE_BEAN_NAME, DataSource.class))
        .willThrow(
            new BeanNotOfRequiredTypeException(
                DATASOURCE_BEAN_NAME, DataSource.class, String.class));

    try {
      BeanFactoryDataSourceLookup lookup = new BeanFactoryDataSourceLookup(beanFactory);
      lookup.getDataSource(DATASOURCE_BEAN_NAME);
      fail("should have thrown DataSourceLookupFailureException");
    } catch (DataSourceLookupFailureException ex) {
      /* expected */
    }
  }
  @Test
  public void testLookupSunnyDay() {
    BeanFactory beanFactory = mock(BeanFactory.class);

    StubDataSource expectedDataSource = new StubDataSource();
    given(beanFactory.getBean(DATASOURCE_BEAN_NAME, DataSource.class))
        .willReturn(expectedDataSource);

    BeanFactoryDataSourceLookup lookup = new BeanFactoryDataSourceLookup();
    lookup.setBeanFactory(beanFactory);
    DataSource dataSource = lookup.getDataSource(DATASOURCE_BEAN_NAME);
    assertNotNull(
        "A DataSourceLookup implementation must *never* return null from "
            + "getDataSource(): this one obviously (and incorrectly) is",
        dataSource);
    assertSame(expectedDataSource, dataSource);
  }
 @Test(expected = IllegalStateException.class)
 public void testLookupWhereBeanFactoryHasNotBeenSupplied() throws Exception {
   BeanFactoryDataSourceLookup lookup = new BeanFactoryDataSourceLookup();
   lookup.getDataSource(DATASOURCE_BEAN_NAME);
 }