Author: hansbak
Date: Wed Dec 23 03:45:54 2009
New Revision: 893396
URL: http://svn.apache.org/viewvc?rev=893396&view=rev
Log:
Add a section to the internal ofbiz document explaining the junit test facility
in OFBiz
Added:
ofbiz/trunk/framework/documents/UnitTest.xml (with props)
Modified:
ofbiz/trunk/applications/commonext/documents/ApacheOfbizTechnical.xml
Modified: ofbiz/trunk/applications/commonext/documents/ApacheOfbizTechnical.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/commonext/documents/ApacheOfbizTechnical.xml?rev=893396&r1=893395&r2=893396&view=diff
==============================================================================
--- ofbiz/trunk/applications/commonext/documents/ApacheOfbizTechnical.xml
(original)
+++ ofbiz/trunk/applications/commonext/documents/ApacheOfbizTechnical.xml Wed
Dec 23 03:45:54 2009
@@ -200,6 +200,7 @@
<xi:include href="../../../framework/service/documents/ServiceEngine.xml"
/>
<xi:include href="../../../framework/webtools/documents/Webtools.xml" />
<xi:include href="../../../framework/testtools/documents/TestTools.xml" />
+ <xi:include href="../../../framework/documents/UnitTest.xml" />
<appendix>
<title>The Apache OFBiz documentation system</title>
Added: ofbiz/trunk/framework/documents/UnitTest.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/documents/UnitTest.xml?rev=893396&view=auto
==============================================================================
--- ofbiz/trunk/framework/documents/UnitTest.xml (added)
+++ ofbiz/trunk/framework/documents/UnitTest.xml Wed Dec 23 03:45:54 2009
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<chapter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ version="5.0" xmlns:xl="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
+ xsi:schemaLocation="http://docbook.org/ns/docbook
../../applications/content/dtd/docbook.xsd"
+ xmlns="http://docbook.org/ns/docbook">
+ <title>The OFBiz Unit Test (Using JUnit)</title>
+ <section>
+ <title>How to define a unit test?</title>
+ <orderedlist>
+ <listitem>
+ <para>
+ Define test-suite in ofbiz-component.xml like this:
+ </para>
+ <programlisting>
+ <test-suite loader="main"
location="testdef/servicetests.xml"/>
+ </programlisting>
+ </listitem>
+ <listitem>
+ <para>
+ Create test-case in test-suite file.
+ </para>
+ <programlisting>
+ <test-suite suite-name="servicetests"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/test-suite.xsd">
+ ....
+ ....
+ <test-case case-name="test-case-name">
+ ...
+ </test-case>
+ ....
+ ....
+ </test-suite>
+ </programlisting>
+ </listitem>
+ </orderedlist>
+ </section>
+ <section>
+ <title>How to create a test case?</title>
+ <para>
+ Define a test-case in an XML test-suite file like this:
+ <programlisting>
+ <test-case case-name="test-case-name">
+ ...
+ </test-case>
+ </programlisting>
+ The test-case tag contains details of each test type:
+ </para>
+ <section>
+ <title>1. Entity XML</title>
+ <para>
+ Specific entity xml and its action would like to be tested in
entity-xml-url attribute and action attribute respectively like this:
+ <programlisting>
+ <test-case
case-name="service-dead-lock-retry-assert-data">
+ <entity-xml action="assert"
entity-xml-url="component://service/testdef/data/ServiceDeadLockRetryAssertData.xml"/>
+ </test-case>
+ </programlisting>
+ </para>
+ </section>
+ <section>
+ <title>2. JUnit</title>
+ <para>
+ Specific class's name which will be tested, in a class-name
attribute like this:
+ <programlisting>
+ <test-case case-name="service-tests">
+ <junit-test-suite
class-name="org.ofbiz.service.test.ServiceEngineTests"/>
+ </test-case>
+ </programlisting>
+ </para>
+ </section>
+ <section>
+ <title>3. Jython</title>
+ <para>
+ Specific jython script's location which will be tested in a
script-location attribute like this:
+ <programlisting>
+ <test-case case-name="service-tests">
+ <jython-test
script-location="component://testtools/webapp/testtools/actions/ServiceEngineTests.py"/>
+ </test-case>
+ </programlisting>
+ </para>
+ </section>
+ <section>
+ <title>4. Service</title>
+ <para>
+ Specific service's name which will be tested in a service-name
attribute like this:
+ <programlisting>
+ <test-case
case-name="service-lock-wait-timeout-retry-test">
+ <service-test
service-name="testServiceLockWaitTimeoutRetry"/>
+ </test-case>
+ </programlisting>
+ </para>
+ </section>
+ <section>
+ <title>5. Simple Method</title>
+ <para>
+ Specific simple method's location and name which will be
tested in a location and a name attribute respectively like this:
+ <programlisting>
+ <test-case
case-name="auto-accounting-transaction-tests-PoReceipt">
+ <simple-method-test
location="component://accounting/script/org/ofbiz/accounting/test/AutoAcctgTransTests.xml"
name="testAcctgTransOnPoReceipts"/>
+ </test-case>
+ </programlisting>
+ </para>
+ </section>
+ </section>
+ <section>
+ <title>How to run a unit test?</title>
+ <para>
+ You can run unit test by run 'ant' with following target:
+ </para>
+ <section>
+ <title>1. run-tests</title>
+ <para>
+ Run OFBiz default tests.
+ </para>
+ </section>
+ <section>
+ <title>2. run-test-list</title>
+ <para>
+ Run all configured tests, stopping/starting ofbiz between each
test.
+ </para>
+ </section>
+ <section>
+ <title>3. run-single-test</title>
+ <para>
+ Run a single test, require two arguments:
+ <orderedlist>
+ <listitem>
+ <para>
+ 'test.component' is a name of test component.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 'test.case' is a name of test case.
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ </section>
+ <section>
+ <title>4. run-single-test-suite</title>
+ <para>
+ Run a single test suite, requiring two arguments:
+ <orderedlist>
+ <listitem>
+ <para>
+ 'test.component' is a name of test component.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 'test.suiteName' is a name of test suite.
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ </section>
+ </section>
+ <section>
+ <title>Possible error messages</title>
+ <para>
+ Some error messages in the log are not important and often caused
by the test.
+ </para>
+ <section>
+ <title>1. Roll back</title>
+ <para>
+ Roll back error message occured when transaction roll back
data. This error message will be in between starting and finished test cass
line like this:
+ <programlisting>
+ [java] 2009-12-22 16:05:28,349 (main) [
TestRunContainer.java:238:INFO ] [JUNIT] : [test case's name] starting...
+ [java] 2009-12-22 16:05:28,355 (main) [
TransactionUtil.java:336:ERROR]
+ ....
+ ....
+ ....
+ [java] ---- exception report
----------------------------------------------------------
+ [java] [TransactionUtil.rollback]
+ [java] Exception: java.lang.Exception
+ [java] Message: Stack Trace
+ [java] ---- stack trace
---------------------------------------------------------------
+ [java] java.lang.Exception: Stack Trace
+ [java]
org.ofbiz.entity.transaction.TransactionUtil.rollback(TransactionUtil.java:335)
+ [java]
org.ofbiz.entity.transaction.TransactionUtil.rollback(TransactionUtil.java:317)
+ [java]
org.ofbiz.entity.test.EntityTestSuite.testTransactionUtilRollback(EntityTestSuite.java:437)
+ [java] sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
+ [java]
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+ [java]
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+ [java] java.lang.reflect.Method.invoke(Method.java:597)
+ [java] junit.framework.TestCase.runTest(TestCase.java:154)
+ [java] junit.framework.TestCase.runBare(TestCase.java:127)
+ [java]
junit.framework.TestResult$1.protect(TestResult.java:106)
+ [java]
junit.framework.TestResult.runProtected(TestResult.java:124)
+ [java] junit.framework.TestResult.run(TestResult.java:109)
+ [java] junit.framework.TestCase.run(TestCase.java:118)
+ [java]
junit.framework.TestSuite.runTest(TestSuite.java:208)
+ [java] junit.framework.TestSuite.run(TestSuite.java:203)
+ [java]
junit.framework.TestSuite.runTest(TestSuite.java:208)
+ [java] junit.framework.TestSuite.run(TestSuite.java:203)
+ [java]
org.ofbiz.testtools.TestRunContainer.start(TestRunContainer.java:146)
+ [java]
org.ofbiz.base.container.ContainerLoader.start(ContainerLoader.java:100)
+ [java]
org.ofbiz.base.start.Start.startStartLoaders(Start.java:272)
+ [java]
org.ofbiz.base.start.Start.startServer(Start.java:322)
+ [java] org.ofbiz.base.start.Start.start(Start.java:326)
+ [java] org.ofbiz.base.start.Start.main(Start.java:411)
+ [java]
--------------------------------------------------------------------------------
+ [java]
+ ....
+ ....
+ ....
+ [java] 2009-12-22 16:05:28,366 (main) [
TransactionUtil.java:346:INFO ] [TransactionUtil.rollback] transaction rolled
back
+ [java] 2009-12-22 16:05:28,370 (main) [
TestRunContainer.java:234:INFO ] [JUNIT] : [test case's name] finished.
+ </programlisting>
+ </para>
+ </section>
+ <section>
+ <title>2. Cobertura</title>
+ <para>
+ A Cobertura error message can show because of the test system
requires a cobertura library that calculates the percentage of code accessed by
tests like this:
+ <programlisting>
+ [java] java.lang.ClassNotFoundException:
org.ofbiz.base.config.CoberturaInstrumenter
+ [java] at
java.net.URLClassLoader$1.run(URLClassLoader.java:200)
+ [java] at
java.security.AccessController.doPrivileged(Native Method)
+ [java] at
java.net.URLClassLoader.findClass(URLClassLoader.java:188)
+ [java] at
java.lang.ClassLoader.loadClass(ClassLoader.java:307)
+ [java] at
java.lang.ClassLoader.loadClass(ClassLoader.java:252)
+ [java] at
org.ofbiz.base.start.InstrumenterWorker.instrument(InstrumenterWorker.java:39)
+ [java] at
org.ofbiz.base.start.Classpath.instrument(Classpath.java:92)
+ [java] at
org.ofbiz.base.start.Start.initClasspath(Start.java:228)
+ [java] at
org.ofbiz.base.start.Start.init(Start.java:87)
+ [java] at
org.ofbiz.base.start.Start.main(Start.java:410)
+ </programlisting>
+ If you want to use cobertura, you have to install it:
+ <orderedlist>
+ <listitem>
+ <para>
+ download the library from <link
xl:href="http://cobertura.sourceforge.net/">the Cobertura website</link>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Put cobertura.jar in 'framework/base/lib'
directory.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Comment cobertura excluding in
'framework/base/build.xml' file.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Re-compile source code.
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ </section>
+ </section>
+ <section>
+ <title>Test result</title>
+ <para>
+ After you run unit test, you can see the result of the testing. If
you use run-tests target, you can see test result web page by view
runtime/logs/test-results/html/index.html file in web browser
+ and see JUnit Test Result files for each test suite in
runtime/logs/test-results directory. If you use other target you only see JUnit
Test Result file in runtime/logs/test-results.
+ </para>
+ </section>
+</chapter>
\ No newline at end of file
Propchange: ofbiz/trunk/framework/documents/UnitTest.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ofbiz/trunk/framework/documents/UnitTest.xml
------------------------------------------------------------------------------
svn:keywords = "Date Rev Author URL Id"
Propchange: ofbiz/trunk/framework/documents/UnitTest.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml