You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by "Philipp Hoppen (JIRA)" <ji...@apache.org> on 2009/09/07 17:29:52 UTC

[jira] Commented: (OFBIZ-2842) Add mocked unit test framework

    [ https://issues.apache.org/jira/browse/OFBIZ-2842?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12752175#action_12752175 ] 

Philipp Hoppen commented on OFBIZ-2842:
---------------------------------------

Hi Bob

In our OFBIz-projects, we like to have automated unit-tests running on a CruiseControl-server. Unfortunately, as OFBIz unit-tests are not directly called from a build script, the surrounding build process will assume a "successful" build even when the tests failed.

I guess using a Mock framework and then calling the tests from the build script is the right solution. I checked out Mockito and it seems to do the job quite well. 

We have lots of minilang-code, so i experimented around in this area. Here is the code to call a minilang service:

        Map simpleMethods = SimpleMethod.getSimpleMethods("file:" + pathToSimpleMethods, simpleMethodName, null);
        SimpleMethod simpleMethod = (SimpleMethod) simpleMethods.get(simpleMethodName);
        simpleMethod.setUseTransaction(false);
        MethodContext methodContext = new MethodContext(dctx, context, null);
        simpleMethod.exec(methodContext);


SimpleMethod-objects try to aquire transactions, and this resulted in exceptions:

java.lang.IllegalStateException: Could not find transaction factory class name definition

Therefore, i added a setUseTransaction(boolean useTransaction) to the SimpleMethod class. It tries to commit a transaction no matter if useTransaction is false, so i added  an if-block around the commit-code so it only runs if useTransaction is true.

I had to write quite a lot "when(delegator...).ThenReturn(...)"-statements until i finally got a very simple minilang service running, but it works.

I hope to find some more time to experiment around.

What exactly do you mean by "UtilResourceBundle solution"?


> Add mocked unit test framework
> ------------------------------
>
>                 Key: OFBIZ-2842
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-2842
>             Project: OFBiz
>          Issue Type: New Feature
>          Components: ALL COMPONENTS
>    Affects Versions: SVN trunk
>            Reporter: Bob Morley
>         Attachments: mockito-all-1.8.0-rc2.jar, OFBIZ-2842.patch
>
>
> Add the ability to create "true" unit tests -- ones that only test the confines of the method itself and using mocking techniques and dependency injection.  This focuses the unit test on the actual code in the method and makes the assumption that other methods have been properly tested and will work.  This does not suggest that there is not also value in unit tests that test more of an integration between components (such as a test that will actually invoke services using a the real dispatcher and manipulate entities with the real delegator).
> The goal of this will be to make it easy and very quick to test java-based methods (initial focus on services) along with not having to start an ofbiz container creating a suite of very quick method focused unit tests.
> I have attached a first pass at some of the base classes and a sample of a "mostly complete" unit test for the DateDimensionServices class (which has one method).  Looking for feedback on this approach, potential for community collaboration, and potential buy-in.  Some other things that are still to be done --
> - more samples
> - integration into ant build
> - solution to the "static worker" issue
> - UtilResourceBundle solution (I have it partially commented out)
> - easy verification of service interface adherence (servicedef existance & IN/OUT validation)
> - potential for GenericEntity get/set validation (verify entitydef adherence) (may not want to do this)
> - investigate potential for mocked simple methods
> - ant driven code coverage metrics

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.