/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.testng;
import org.apache.camel.test.spring.CamelSpringTestContextLoader;
import org.apache.camel.test.spring.CamelSpringTestContextLoaderTestExecutionListener;
import org.apache.camel.test.spring.DisableJmxTestExecutionListener;
import org.apache.camel.test.spring.StopWatchTestExecutionListener;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springframework.test.context.support.DirtiesContextTestExecutionListener;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.springframework.test.context.transaction.TransactionalTestExecutionListener;
import org.testng.IHookable;
/**
* Bridges Camel testing capabilities from {@link CamelSpringTestSupport} into
* Spring Test driven classes. This class is based on {@link AbstractTestNGSpringContextTests}
* but must also declare a {@link ContextConfiguration} to enable the custom context loader needed
* to support some of the Camel testing capabilities.
*/
@TestExecutionListeners(
listeners = {
CamelSpringTestContextLoaderTestExecutionListener.class,
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class,
DisableJmxTestExecutionListener.class,
StopWatchTestExecutionListener.class},
inheritListeners = false)
@ContextConfiguration(loader = AbstractCamelTestNGSpringContextTests.TestNGCamelSpringTestContextLoader.class)
public abstract class AbstractCamelTestNGSpringContextTests extends AbstractTestNGSpringContextTests
implements IHookable {
public static final class TestNGCamelSpringTestContextLoader extends CamelSpringTestContextLoader {
/**
* Since {@link AbstractTestNGSpringContextTests} declares the test context as private and
* we cannot control its instantiation, we need to use {@link ContextConfiguration} on
* {@link AbstractCamelTestNGSpringContextTests}. Unfortunately, this also tries to load
* the a context resource based on the default naming convention. We don't want to require
* end users to always have a resource for their tests' abstract parent so we override
* the behavior here to prevent that from happening.
*/
@Override
protected String[] generateDefaultLocations(Class<?> clazz) {
if (clazz == AbstractCamelTestNGSpringContextTests.class) {
return new String[0];
} else {
return super.generateDefaultLocations(clazz);
}
}
}
}