aldous liu created OFBIZ-13402:
----------------------------------
Summary: Test source files should be moved from src/main/ to
src/test/ to avoid inclusion in production release artifacts
Key: OFBIZ-13402
URL: https://issues.apache.org/jira/browse/OFBIZ-13402
Project: OFBiz
Issue Type: Improvement
Components: framework/base, framework/service
Affects Versions: 24.09.05
Reporter: aldous liu
Multiple test source files (Groovy test classes) are located under
src/main/groovy/ directories instead of
src/test/groovy/ across the codebase. This results in test code being
compiled into the production JARs and
distributed as part of the official release.
Reproducer
After building the project, the following test classes appear in the compiled
output:
# Example check
jar tf build/libs/ofbiz.jar | grep -E 'SimpleTests|ServicePurgeTest'
Affected Files
The following 28 test files are in src/main/ instead of src/test/:
framework/
- framework/base/src/main/groovy/org/apache/ofbiz/base/test/SimpleTests.groovy
-
framework/service/src/main/groovy/org/apache/ofbiz/service/test/ServicePurgeTest.groovy
applications/party/
-
applications/party/src/main/groovy/org/apache/ofbiz/party/party/test/ContactMechWorkerTests.groovy
-
applications/party/src/main/groovy/org/apache/ofbiz/party/party/test/PartyContactMechTests.groovy
-
applications/party/src/main/groovy/org/apache/ofbiz/party/party/test/PartyStatusChangeTests.groovy
-
applications/party/src/main/groovy/org/apache/ofbiz/party/party/test/PartyTests.groovy
applications/product/
-
applications/product/src/main/groovy/org/apache/ofbiz/product/product/test/CategoryTests.groovy
-
applications/product/src/main/groovy/org/apache/ofbiz/product/product/test/CostTests.groovy
-
applications/product/src/main/groovy/org/apache/ofbiz/product/product/test/InventoryTests.groovy
-
applications/product/src/main/groovy/org/apache/ofbiz/product/product/test/ProductConfigTests.groovy
-
applications/product/src/main/groovy/org/apache/ofbiz/product/product/test/ProductFeatureTypeTests.groovy
-
applications/product/src/main/groovy/org/apache/ofbiz/product/product/test/ProductPriceTests.groovy
-
applications/product/src/main/groovy/org/apache/ofbiz/product/product/test/ProductPromoActionTests.groovy
-
applications/product/src/main/groovy/org/apache/ofbiz/product/product/test/ProductPromoCondTests.groovy
-
applications/product/src/main/groovy/org/apache/ofbiz/product/product/test/ProductTagTest.groovy
-
applications/product/src/main/groovy/org/apache/ofbiz/product/product/test/ProductTest.groovy
-
applications/product/src/main/groovy/org/apache/ofbiz/product/product/test/ProductTests.groovy
-
applications/product/src/main/groovy/org/apache/ofbiz/product/product/test/ShipmentTests.groovy
-
applications/product/src/main/groovy/org/apache/ofbiz/shipment/product/test/ShipmentCostTests.groovy
applications/order/
-
applications/order/src/main/groovy/org/apache/ofbiz/order/order/test/CustRequestPermissionCheckTests.groovy
-
applications/order/src/main/groovy/org/apache/ofbiz/order/order/test/OrderRequirementTests.groovy
-
applications/order/src/main/groovy/org/apache/ofbiz/order/order/test/OrderReturnTests.groovy
-
applications/order/src/main/groovy/org/apache/ofbiz/order/order/test/OrderTests.groovy
-
applications/order/src/main/groovy/org/apache/ofbiz/order/order/test/QuoteTests.groovy
-
applications/order/src/main/groovy/org/apache/ofbiz/order/order/test/ShoppingListTests.groovy
applications/marketing/
-
applications/marketing/src/main/groovy/org/apache/ofbiz/marketing/marketing/test/MarketingTests.groovy
plugins/
-
plugins/assetmaint/src/main/groovy/org/apache/ofbiz/assetmaint/assetmaint/test/FixedAssetMaintTests.groovy
-
plugins/ecommerce/src/main/groovy/org/apache/ofbiz/ecommerce/order/test/OrderNotificationTests.groovy
Plus their corresponding test definition XMLs under testdef/ directories
(e.g., framework/base/testdef/basetests.xml,
framework/service/testdef/servicetests.xml).
Expected Behavior
- All test source files should reside under src/test/groovy/ (or
src/test/java/)
- The build output should not contain test classes
- Standard Maven/Gradle conventions (src/main for production, src/test for
tests) should be followed
Actual Behavior
- Test classes are intermixed with production code under
src/main/groovy/.../test/
- They are compiled and packaged into production artifacts
- No equivalent src/test/ directory structure exists for these files
Impact
1. Artifact bloat: Production JARs include unnecessary test code
2. Convention violation: Mixing test and production code contradicts standard
Maven/Gradle project layout
3. Security: Test hooks or bypasses inadvertently exposed in production
classpath
4. Maintainability: Confusing code organization for new contributors
Proposed Fix
1. Move each *Tests.groovy file from src/main/groovy/.../${module}/test/ to
src/test/groovy/.../${module}/test/
2. Update any internal path references in test definition XML files
3. Verify build.gradle correctly separates main and test source sets
4. Verify the build no longer includes test classes in production artifacts
Additional Context
This was observed while analyzing the OFBiz codebase for production
deployment. The framework/testtools component
already correctly serves as the dedicated test infrastructure module — test
code within other framework/ and
applications/ modules should follow the standard src/test/ layout.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)