You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2015/04/19 22:46:56 UTC
svn commit: r1674695 -
/openwebbeans/cms-site/trunk/content/owbinternalunittests.mdtext
Author: struberg
Date: Sun Apr 19 20:46:56 2015
New Revision: 1674695
URL: http://svn.apache.org/r1674695
Log:
add documentation about internal unit tests.
Started by karlkilden, finished by struberg
Added:
openwebbeans/cms-site/trunk/content/owbinternalunittests.mdtext (with props)
Added: openwebbeans/cms-site/trunk/content/owbinternalunittests.mdtext
URL: http://svn.apache.org/viewvc/openwebbeans/cms-site/trunk/content/owbinternalunittests.mdtext?rev=1674695&view=auto
==============================================================================
--- openwebbeans/cms-site/trunk/content/owbinternalunittests.mdtext (added)
+++ openwebbeans/cms-site/trunk/content/owbinternalunittests.mdtext Sun Apr 19 20:46:56 2015
@@ -0,0 +1,79 @@
+Title: Testing strategies
+Notice: 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.
+
+# Testing strategies for unit tests inside OpenWebBeans
+
+One could argue that unit tests are harder to write when your instances are managed by a container.
+However this is only true if the booting of said container is uncharted territory.
+But lets assume the container control is taken cared of handily. Well then it can be quite the breath of fresh air to test code
+that leverage dependency injection.
+
+Here comes the good news. Testing OpenWebBeans and CDI in general (and actually many other Java EE frameworks)
+is in a good state as of today and testing frameworks are reaching a pretty decent level of maturity. Stay with us and
+we will compare the pros and cons with
+the different strategies.
+
+### Good Practice
+
+We won't go in to detail on how to properly use unit tests or integration tests in your project. However so called "Whitebox Testing" is
+discouraged. Using whitebox testing is often critizied regardless but with frameworks that leverage
+proxies it's simply not something you should attempt. Any reflection trick would likely miss the mark and modify the proxy.
+Instead focus on functional tests and structure your code with high cohesion so that testing the public methods get's the job done.
+Remember to add beans.xml and other resources to your to your test path.
+
+
+### Start small with plain tests
+Testing code that leverage CDI does not differ much from using CDI in your project. You should start with just a plain pojo
+in your project and likewise a plain unit test. Only when you need context should you upgrade the pojo to a CDI managed instance.
+Still this does not mean you automatically need something more then plain unit test. But when you need the container to act on your
+instances (for example to trigger ``@PostConstruct``) then go ahead and upgrade the test to be CDI aware.
+
+### CDI aware tests
+In OpenWebBeans we use JUnit as testing framework. For not having to deal with the container details each time you can
+simply write a JUnit test which extends the ``org.apache.webbeans.test.AbstractUnitTest`` base class.
+
+Lets look at how to write a unit test which e.g. tests a method invocation on a specific CDI bean.
+
+The first thing we obviously need is the CDI bean which should get tested:
+
+ @RequestScoped
+ public class BeanUnderTest
+ {
+ public int meaningOfLife()
+ {
+ return 42;
+ }
+ }
+
+And now let's write the unit test which calls this method:
+
+ public class MySimpleTest extends AbstractUnitTest
+ {
+ @Test
+ public void testMeaningOfLife()
+ {
+ startContainer(BeanUnderTest.class);
+ BeanUnderTest instance = getInstance(BeanUnderTest.class);
+ Assert.assertnotNull(instance);
+ Assert.assertEquals(42, instance.meaningOfLife());
+ }
+ }
+
+That's all! You don't need even need to manually shut down the container after the method.
+If you have multiple beans to test then pass all of them as argument to ``startContainer(Class...);``.
+There are also startContainer variants which take a beans.xml. Also look at the other methods of ``AbstractUnitTest`` for more useful features.
\ No newline at end of file
Propchange: openwebbeans/cms-site/trunk/content/owbinternalunittests.mdtext
------------------------------------------------------------------------------
svn:eol-style = native