Re: EOModels not loaded for projects in Java Build Path during unit tests

From: Ian McDougall (imcdougal..pple.com)
Date: Thu Aug 03 2006 - 12:44:12 EDT

  • Next message: Mike Schrag: "Re: EOModels not loaded for projects in Java Build Path during unit tests"

    This is a problem inside of eclipse, but does not occur if you try
    running unit tests in, say, ant.

    to combat this problem, we load the model manually with code similar to:

    EOModelGroup mg = EOModelGroup.defaultGroup();
    if (mg.models().count() == 0) {
                 System.out.println("No models in EOModelGroup.
    Attempting to load ");
                 String modelPath = System.getProperty("eomodel.path");
                 if (modelPath != null) {
                     mg.addModelWithPathURL(new URL("file://" + modelPath));
                 }
    }

    The issue has something to do with the main bundle getting lost when
    run as a JUnit test.

    Does anyone know how to specify the main bundle, or another way of
    fixing this problem?

    _ _
    Ian

    On Aug 3, 2006, at 5:01 AM, Denis Frolov wrote:

    > Hi,
    >
    > I have two projects in Eclipse: MyProject and
    > MyProjectBusinessLogic. MyProjectBusinessLogic is specified in
    > Projects tab of Java Build Path section in MyProject's Properties.
    >
    > I have one unit test extending ERXTestCasa with the following code:
    >
    > public void setUp() throws Exception {
    > super.setUp();
    > WOApplication.primeApplication(null, NSBundle.mainBundle
    > ().bundlePathURL(), null);
    > }
    >
    > public void testCustomerValidates() {
    > Customer customer = (Customer)
    > EOUtilities.createAndInsertInstance(editingContext(), "Customer");
    > assertValidates(false, customer);
    > }
    >
    > Customer is an entity of model in MyProjectBusinessLogic
    >
    > When I run the unit test via Eclipse Junit launcher I get the
    > following error and exception:
    >
    > ERROR (ERXEntityClassDescription.java:321) - Entity Customer not
    > found in the default model group!
    >
    > java.lang.NullPointerException at
    > er.extensions.ERXEntityClassDescription
    > $Factory.registerDescriptionForEntity
    > (ERXEntityClassDescription.java:516) at
    > er.extensions.ERXEntityClassDescription
    > $Factory.classDescriptionNeededForEntityName
    > (ERXEntityClassDescription.java:322) at
    > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
    > sun.reflect.NativeMethodAccessorImpl.invoke
    > (NativeMethodAccessorImpl.java:39) at
    > sun.reflect.DelegatingMethodAccessorImpl.invoke
    > (DelegatingMethodAccessorImpl.java:25) at
    > java.lang.reflect.Method.invoke(Method.java:324) at
    > com.webobjects.foundation.NSSelector._safeInvokeMethod
    > (NSSelector.java:120) at
    > com.webobjects.foundation.NSNotificationCenter$_Entry.invokeMethod
    > (NSNotificationCenter.java:601) at
    > com.webobjects.foundation.NSNotificationCenter.postNotification
    > (NSNotificationCenter.java:545) at
    > com.webobjects.foundation.NSNotificationCenter.postNotification
    > (NSNotificationCenter.java:559) at
    > com.webobjects.eocontrol.EOClassDescription.classDescriptionForEntityN
    > ame(EOClassDescription.java:297) at
    > com.webobjects.eoaccess.EOUtilities.createAndInsertInstance
    > (EOUtilities.java:814) at
    > dm.inmega.tests.SimpleTest.testCustomerValidates(SimpleTest.java:
    > 30) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
    > Method) at sun.reflect.NativeMethodAccessorImpl.invoke
    > (NativeMethodAccessorImpl.java:39) at
    > sun.reflect.DelegatingMethodAccessorImpl.invoke
    > (DelegatingMethodAccessorImpl.java:25) at
    > java.lang.reflect.Method.invoke(Method.java:324) at
    > junit.framework.TestCase.runTest(TestCase.java:154) at
    > er.testrunner.ERXTestCase.runBare(ERXTestCase.java:95) at
    > junit.framework.TestResult$1.protect(TestResult.java:106) at
    > junit.framework.TestResult.runProtected(TestResult.java:124) at
    > junit.framework.TestResult.run(TestResult.java:109) at
    > junit.framework.TestCase.run(TestCase.java:118) at
    > junit.framework.TestSuite.runTest(TestSuite.java:208) at
    > junit.framework.TestSuite.run(TestSuite.java:203) at
    > org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run
    > (JUnit3TestReference.java:128) at
    > org.eclipse.jdt.internal.junit.runner.TestExecution.run
    > (TestExecution.java:38) at
    > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests
    > (RemoteTestRunner.java:460) at
    > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests
    > (RemoteTestRunner.java:673) at
    > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run
    > (RemoteTestRunner.java:386) at
    > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main
    > (RemoteTestRunner.java:196) If I load the model manually by calling:
    >
    > EOModelGroup.defaultGroup().addModelWithPathURL(new File
    > (pathToModel).toURL());
    >
    > I get the same error and another exception:
    >
    > ERROR (ERXEntityClassDescription.java:321) - Entity Customer not
    > found in the default model group! at java.lang.Class.forName0
    > (Native Method) at java.lang.Class.forName(Class.java:141) at
    > com.webobjects.foundation._NSUtilities._classWithPartialName
    > (_NSUtilities.java:307) at
    > com.webobjects.foundation._NSUtilities.classWithName
    > (_NSUtilities.java:291) at
    > com.webobjects.eoaccess.EOModel._setEntityForEntityNameClassName
    > (EOModel.java:1242) at
    > com.webobjects.eoaccess.EOModel._addFakeEntityWithPropertyList
    > (EOModel.java:1280) at
    > com.webobjects.eoaccess.EOModel._initWithTableOfContentsPropertyListPa
    > thURL(EOModel.java:1092) at
    > com.webobjects.eoaccess.EOModel.<init>(EOModel.java:802) at
    > com.webobjects.eoaccess.EOModelGroup.addModelWithPathURL
    > (EOModelGroup.java:498) at
    > dm.inmega.tests.SimpleTest.testCustomerValidates(SimpleTest.java:
    > 32) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
    > Method) at sun.reflect.NativeMethodAccessorImpl.invoke
    > (NativeMethodAccessorImpl.java:39) at
    > sun.reflect.DelegatingMethodAccessorImpl.invoke
    > (DelegatingMethodAccessorImpl.java:25) at
    > java.lang.reflect.Method.invoke(Method.java:324) at
    > junit.framework.TestCase.runTest(TestCase.java:154) at
    > er.testrunner.ERXTestCase.runBare(ERXTestCase.java:95) at
    > junit.framework.TestResult$1.protect(TestResult.java:106) at
    > junit.framework.TestResult.runProtected(TestResult.java:124) at
    > junit.framework.TestResult.run(TestResult.java:109) at
    > junit.framework.TestCase.run(TestCase.java:118) at
    > junit.framework.TestSuite.runTest(TestSuite.java:208) at
    > junit.framework.TestSuite.run(TestSuite.java:203) at
    > org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run
    > (JUnit3TestReference.java:128) at
    > org.eclipse.jdt.internal.junit.runner.TestExecution.run
    > (TestExecution.java:38) at
    > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests
    > (RemoteTestRunner.java:460) at
    > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests
    > (RemoteTestRunner.java:673) at
    > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run
    > (RemoteTestRunner.java:386) at
    > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main
    > (RemoteTestRunner.java:196) Caused by:
    > java.lang.ClassCastException at dm.inmega.Administrator.<clinit>
    > (Administrator.java:34) ... 28 more
    >
    > Administrator is also an entity in MyProjectBusinessLogic and line
    > 34 is:
    >
    > public static AdministratorClazz clazz = (AdministratorClazz)
    > EOEnterpriseObjectClazz.clazzForEntityNamed("Administrator"); Is
    > there a solution to this problem other that removing
    > MyProjectBusinessLogic from Projects in Java Build Path of
    > MyProject? There should be since to my mind this setup is pretty
    > common.
    >
    > ---
    > Denis Frolov
    > Media Agency Design Maximum
    >
    > Tel: +7 863 2648211
    > Fax: +7 863 2645229
    > Web: http://www.designmaximum.com
    >



    This archive was generated by hypermail 2.0.0 : Thu Aug 03 2006 - 12:44:15 EDT