cancel
Showing results for 
Search instead for 
Did you mean: 

Getting started with JUnit testing

agatap
Champ in-the-making
Champ in-the-making
Hello

I am working as a developer on a web-application, that uses Alfresco as a core on the serverside to handle users, registration, content etc.
As a test driven programmer, I would like to white-box test my code.

So, my question is - how do we get started writing unit tests for our bean-code? Is there a simple way of setting up a mock-environment, or a very basic Alfresco environment?
Can you point me to some documentation?
How have you guys tested your stuff?

Best
Agata

10:51:24,434 ERROR [transform.magick.AbstractImageMagickContentTransformer] ImageMagickContentTransformer not available: Failed to perform ImageMagick transformation:
Execution result:
   os:         Windows XP
   command:    imconvert "C:\DOCUME~1\agatap\LOCALS~1\Temp\Alfresco\ImageMagickContentTransformer_init_source_50290.gif"  "C:\DOCUME~1\agatap\LOCALS~1\Temp\Alfresco\ImageMagickContentTransformer_init_target_50291.png"
   succeeded:  false
   exit code:  1
   out:       
   err:        Cannot run program "imconvert": CreateProcess error=2, The system cannot find the file specified
java.lang.ExceptionInInitializerError
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
   at java.lang.reflect.Constructor.newInstance(Unknown Source)
   at junit.framework.TestSuite.createTest(TestSuite.java:131)
   at junit.framework.TestSuite.addTestMethod(TestSuite.java:114)
   at junit.framework.TestSuite.<init>(TestSuite.java:75)
   at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader.getTest(JUnit3TestLoader.java:102)
   at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader.loadTests(JUnit3TestLoader.java:59)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:445)
   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: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverConnector' defined in class path resource [alfresco/core-services-context.xml]: Invocation of init method failed; nested exception is java.io.IOException: Cannot bind to URL [rmi://localhost:50500/alfresco/jmxrmi]: javax.naming.NameAlreadyBoundException: alfresco/jmxrmi [Root exception is java.rmi.AlreadyBoundException: alfresco/jmxrmi]
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1088)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:429)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:250)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:247)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:161)
   at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:270)
   at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:346)
   at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:92)
   at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:77)
   at org.alfresco.util.ApplicationContextHelper.getApplicationContext(ApplicationContextHelper.java:55)
   at org.alfresco.sample.ContentHitsAspectTest.<clinit>(ContentHitsAspectTest.java:55)
   … 13 more
Caused by: java.io.IOException: Cannot bind to URL [rmi://localhost:50500/alfresco/jmxrmi]: javax.naming.NameAlreadyBoundException: alfresco/jmxrmi [Root exception is java.rmi.AlreadyBoundException: alfresco/jmxrmi]
   at javax.management.remote.rmi.RMIConnectorServer.newIOException(Unknown Source)
   at javax.management.remote.rmi.RMIConnectorServer.start(Unknown Source)
   at org.springframework.jmx.support.ConnectorServerFactoryBean.afterPropertiesSet(ConnectorServerFactoryBean.java:168)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1118)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1085)
   … 24 more
Caused by: javax.naming.NameAlreadyBoundException: alfresco/jmxrmi [Root exception is java.rmi.AlreadyBoundException: alfresco/jmxrmi]
   at com.sun.jndi.rmi.registry.RegistryContext.bind(Unknown Source)
   at com.sun.jndi.toolkit.url.GenericURLContext.bind(Unknown Source)
   at javax.naming.InitialContext.bind(Unknown Source)
   at javax.management.remote.rmi.RMIConnectorServer.bind(Unknown Source)
   … 28 more
Caused by: java.rmi.AlreadyBoundException: alfresco/jmxrmi
   at sun.rmi.registry.RegistryImpl.bind(RegistryImpl.java:123)
   at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
   at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386)
   at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
   at sun.rmi.transport.Transport$1.run(Transport.java:159)
   at java.security.AccessController.doPrivileged(Native Method)
   at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
   at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
   at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
   at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
   at java.lang.Thread.run(Thread.java:619)
   at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
   at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
   at sun.rmi.server.UnicastRef.invoke(Unknown Source)
   at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
   … 32 more
4 REPLIES 4

pmonks
Star Contributor
Star Contributor
Probably the best examples to look at are:
1. Alfresco's own JUnit tests
2. the SDK example projects (eg. FirstFoundationClient)
which demonstrate how to bootstrap a minimal Alfresco repository outside of a servlet container.

The Alfresco source code (which includes both of the above) is available from our public Subversion server - details on how to access this are at http://wiki.alfresco.com/wiki/Alfresco_SVN_Development_Environment.

agatap
Champ in-the-making
Champ in-the-making
I browsed trough the sample project that come with the SDK.
One of them contained a JUnit test - the SDK Custom Aspect contains a JUnit test.
I tried to run it, and it failed, the stack trace below the post.
Obviously - I did miss something about the setup?
So - how can I run a JUnit test straight from my IDE (eclipse).
I use WindowsXP/OSX (depends on mood), try to run on the localhost with an MySQL installation.

Best,
Agata

jperilla
Champ in-the-making
Champ in-the-making
I am having the same problem. Did you ever get an answer to this?

mrogers
Star Contributor
Star Contributor
For example I'm running the LockServiceImplTest from Eclipse at the moment.

Select the unit test in Eclipse and Right click on it.  Then Run As Junit test. 😎

The only thing I fiddle with is the project class path to include my Tomcat shared folder which contains my configuration settings, without that it would use the default settings.