[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [p2-dev] QueryUtil changes and their impact on testability

Hi Matt,
p2 is an OSGi based framework so when running test on it, you need to run them as "JUnit Plug-in tests". That has always been the case as far as I know. A lot of p2 relies on services being started etc.

Thomas Hallgren

On 03/23/2010 04:07 PM, Matt Hughes wrote:
Now that many of the *Query classes have moved into static methods on
QueryUtil, there is a problem with unit testability.

QueryUtil has a static initializers that use ExpressionUtil.

ExpressionUtil has static initializers that *depend on running in an
OSGi environment* (not unit test):

public final class ExpressionUtil {
	private static final LDAPFilterParser ldapFilterParser = new
	public static final IExpression TRUE_EXPRESSION =
	public static final IExpression FALSE_EXPRESSION =

	private ExpressionUtil() {
		//We don't want to ppl to instantiate this class

	 * Returns the global expression factory
	 * @return The global expression factory.
	public static IExpressionFactory getFactory() {
		return MetadataActivator.getExpressionFactory();

(As soon as one even references ExpressionUtil, its static
initializers are called which in turn invoke #getFactory which rely on
MetadataActivator to have been activated by OSGi context.)

Therefore, if any class uses QueryUtil in its implementation (which
many must do now since the *Query classes have gone away), those
classes cannot be unit tested.  One could try and get around this by
setting MetadataActivator.instance, but that would only get you so
far.  Metadata#getExpressionFactory would still fail and cannot be
stubbed out so far as I can tell.

Am I missing something? How are people testing this code that makes
use of QueryUtil?
p2-dev mailing list