Hi Mick,
from the fact that you don't show any code that instantiates the
entityManagerFactory variable, I assume you get this NPE because the
instantiation failed. So effectively the NPE is masking the real exception from
JPA. You need to turn up the logging to reveal the disappearing stacktrace, or
find the code that's calling Persistence.createEntityManagerFactory() and make
sure you catch the exception and log the stacktrace.
Mick Knutson on 20/03/08 22:03, wrote:
I have been trying to run this example:
http://bill.dudney.net/roller/bill/entry/20070428
Now it seems, that when the testNG tests run, I get an NPE here:
*DbUnitTestBase.java
*
@BeforeClass(groups = {"database"})
protected void loadSeedData() throws Exception {
logger.debug("loadSeedData");
IDatabaseConnection dbunitConn = null;
EntityManager em = null;
try {
*em = entityManagerFactory.createEntityManager();*
Here is my error in *testng-results.xml*
<test name="Command line test">
<class name="net.dudney.jpaund.domain.SimpleTest">
<test-method status="SKIP" signature="initDB()" name="initDB"
is-config="true" duration-ms="0" started-at="2008-03-20T11:51:46Z"
finished-at="2008-03-20T11:51:46Z">
</test-method>
<test-method status="SKIP" signature="testCreateSiteUser()"
name="testCreateSiteUser" duration-ms="0" started-at="2008-03-20T11:51:46Z"
finished-at="2008-03-20T11:51:46Z">
</test-method>
<test-method status="FAIL" signature="loadSeedData()"
name="loadSeedData" is-config="true" duration-ms="0"
started-at="2008-03-20T11:51:46Z" finished-at="2008-03-20T11:51:46Z">
<exception class="java.lang.NullPointerException">
<full-stacktrace>
<![CDATA[java.lang.NullPointerException
at net.dudney.jpaund.domain.DbUnitTestBase.loadSeedData(
DbUnitTestBase.java:43)
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:585)
at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:580)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java
:398)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:145)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:82)
at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(
TestMethodWorker.java:166)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:103)
at org.testng.TestRunner.runWorkers(TestRunner.java:689)
at org.testng.TestRunner.privateRun(TestRunner.java:566)
at org.testng.TestRunner.run(TestRunner.java:466)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:301)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:296)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:276)
at org.testng.SuiteRunner.run(SuiteRunner.java:191)
at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:808)
at org.testng.TestNG.runSuitesLocally(TestNG.java:776)
at org.testng.TestNG.run(TestNG.java:701)
at org.apache.maven.surefire.testng.TestNGExecutor.run(
TestNGExecutor.java:62)
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(
TestNGDirectoryTestSuite.java:136)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
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:585)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(
SurefireBooter.java:338)
at org.apache.maven.surefire.booter.SurefireBooter.main(
SurefireBooter.java:997)
]]>
</full-stacktrace>
</exception>
</test-method>
</class>
<class name="net.dudney.jpaund.dao.jpa.BaseDaoJpaTest">
<test-method status="PASS" signature="testGetUpdateObjects()"
name="testGetUpdateObjects" duration-ms="13078"
started-at="2008-03-20T11:50:42Z" finished-at="2008-03-20T11:50:55Z">
</test-method>
<test-method status="PASS" signature="testQueryBuildingRealClass()"
name="testQueryBuildingRealClass" duration-ms="0"
started-at="2008-03-20T11:50:55Z" finished-at="2008-03-20T11:50:55Z">
</test-method>
<test-method status="PASS"
signature="testQueryBuildingNullParameter()"
name="testQueryBuildingNullParameter" duration-ms="0"
started-at="2008-03-20T11:51:46Z" finished-at="2008-03-20T11:51:46Z">
</test-method>
<test-method status="PASS" signature="testGetObject()"
name="testGetObject" duration-ms="219" started-at="2008-03-20T11:51:45Z"
finished-at="2008-03-20T11:51:46Z">
</test-method>
<test-method status="PASS"
signature="testSaveOrUpdateObjectExistingObject()"
name="testSaveOrUpdateObjectExistingObject" duration-ms="12735"
started-at="2008-03-20T11:51:20Z" finished-at="2008-03-20T11:51:33Z">
</test-method>
<test-method status="PASS" signature="setUpSpring()"
name="setUpSpring" is-config="true" duration-ms="1281"
started-at="2008-03-20T11:50:13Z" finished-at="2008-03-20T11:50:14Z">
</test-method>
<test-method status="PASS" signature="testQueryBuildingEmptyParam()"
name="testQueryBuildingEmptyParam" duration-ms="0"
started-at="2008-03-20T11:50:30Z" finished-at="2008-03-20T11:50:30Z">
</test-method>
<test-method status="PASS" signature="testDeleteObject()"
name="testDeleteObject" duration-ms="13281"
started-at="2008-03-20T11:51:07Z" finished-at="2008-03-20T11:51:20Z">
</test-method>
<test-method status="PASS"
signature="testQueryBuildingDoubleParamOrderBy()"
name="testQueryBuildingDoubleParamOrderBy" duration-ms="0"
started-at="2008-03-20T11:51:33Z" finished-at="2008-03-20T11:51:33Z">
</test-method>
<test-method status="PASS"
signature="testSaveOrUpdateObjectNewObject()"
name="testSaveOrUpdateObjectNewObject" duration-ms="12203"
started-at="2008-03-20T11:50:30Z" finished-at="2008-03-20T11:50:42Z">
</test-method>
<test-method status="PASS" signature="testParameterQuery()"
name="testParameterQuery" duration-ms="344"
started-at="2008-03-20T11:51:07Z" finished-at="2008-03-20T11:51:07Z">
</test-method>
<test-method status="PASS" signature="testFetchWithOrderBy()"
name="testFetchWithOrderBy" duration-ms="12360"
started-at="2008-03-20T11:51:33Z" finished-at="2008-03-20T11:51:45Z">
</test-method>
<test-method status="PASS"
signature="testQueryBuildingSingleParam()"
name="testQueryBuildingSingleParam" duration-ms="0"
started-at="2008-03-20T11:50:55Z" finished-at="2008-03-20T11:50:55Z">
</test-method>
<test-method status="PASS" signature="testGetPKFieldName()"
name="testGetPKFieldName" duration-ms="0" started-at="2008-03-20T11:50:55Z"
finished-at="2008-03-20T11:50:55Z">
</test-method>
<test-method status="PASS" signature="testDeleteNonObject()"
name="testDeleteNonObject" duration-ms="11140"
started-at="2008-03-20T11:50:55Z" finished-at="2008-03-20T11:51:07Z">
</test-method>
<test-method status="PASS" signature="testSingleParameterQuery()"
name="testSingleParameterQuery" duration-ms="1079"
started-at="2008-03-20T11:50:29Z" finished-at="2008-03-20T11:50:30Z">
</test-method>
<test-method status="PASS" signature="loadSeedData()"
name="loadSeedData" is-config="true" duration-ms="15234"
started-at="2008-03-20T11:50:14Z" finished-at="2008-03-20T11:50:29Z">
</test-method>
<test-method status="PASS"
signature="testQueryBuildingDoubleParam()"
name="testQueryBuildingDoubleParam" duration-ms="0"
started-at="2008-03-20T11:50:55Z" finished-at="2008-03-20T11:50:55Z">
</test-method>
</class>
</test>
</suite>
The strange thing is, most of the tests pass in *BaseDaoJpaTest.java*
but not in *SimpleTest.java*
I am very perplexed and want to fully understand how to get DBUnit, Maven,
and openJPA forking please.