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

From: Mike Schrag (mschra..dimension.com)
Date: Thu Aug 03 2006 - 13:25:58 EDT

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

    I ran into things like this when working on Entity Modeler sql
    gen ... Try setting the com.webobjects.classpath system property
    explicitly -- NSBundle uses the paths to find frameworks and models.

    ms

    On Aug 3, 2006, at 12:44 PM, Ian McDougall wrote:

    > 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.classDescriptionForEntity
    >> Name(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._initWithTableOfContentsPropertyListP
    >> athURL(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 - 13:26:03 EDT