Author: sebb
Date: Wed Sep 21 12:06:02 2011
New Revision: 1173581

URL: http://svn.apache.org/viewvc?rev=1173581&view=rev
Log:
Bug 47888 - JUnit Sampler re-uses test object

Modified:
    jakarta/jmeter/trunk/docs/images/screenshots/junit_sampler.png
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
    
jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java
    
jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/sampler/JUnitSampler.java
    jakarta/jmeter/trunk/xdocs/changes.xml
    jakarta/jmeter/trunk/xdocs/images/screenshots/junit_sampler.png
    jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml

Modified: jakarta/jmeter/trunk/docs/images/screenshots/junit_sampler.png
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/junit_sampler.png?rev=1173581&r1=1173580&r2=1173581&view=diff
==============================================================================
Binary files - no diff available.

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1173581&r1=1173580&r2=1173581&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties 
(original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties 
Wed Sep 21 12:06:02 2011
@@ -425,6 +425,7 @@ junit_success_default_msg=Test successfu
 junit_success_msg=Success Message
 junit_test_config=JUnit Test Parameters
 junit_test_method=Test Method
+junit_create_instance_per_sample=Create a new instance per sample
 ldap_argument_list=LDAPArgument List
 ldap_connto=Connection timeout (in milliseconds)
 ldap_parse_results=Parse the search results ?

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties?rev=1173581&r1=1173580&r2=1173581&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
 (original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
 Wed Sep 21 12:06:02 2011
@@ -390,6 +390,7 @@ junit_success_default_msg=Test r\u00E9us
 junit_success_msg=Message de succ\u00E8s
 junit_test_config=Param\u00E8tres Test JUnit
 junit_test_method=M\u00E9thode de test
+junit_create_instance_per_sample=Cr\u00E9er une nouvelle instance pour chaque 
sample
 ldap_argument_list=Liste d'arguments LDAP
 ldap_connto=D\u00E9lai d'attente de connexion (millisecondes)
 ldap_parse_results=Examiner les r\u00E9sultats de recherche ?

Modified: 
jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java?rev=1173581&r1=1173580&r2=1173581&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java
 (original)
+++ 
jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java
 Wed Sep 21 12:06:02 2011
@@ -131,6 +131,7 @@ implements ChangeListener, ActionListene
     private JCheckBox appendError = new 
JCheckBox(JMeterUtils.getResString("junit_append_error")); //$NON-NLS-1$
     private JCheckBox appendExc = new 
JCheckBox(JMeterUtils.getResString("junit_append_exception")); //$NON-NLS-1$
     private JCheckBox junit4 = new 
JCheckBox(JMeterUtils.getResString("junit_junit4")); //$NON-NLS-1$
+    private JCheckBox createInstancePerSample = new 
JCheckBox(JMeterUtils.getResString("junit_create_instance_per_sample")); 
//$NON-NLS-1$
 
     /** A combo box allowing the user to choose a test class. */
     private JComboBox classnameCombo;
@@ -234,12 +235,14 @@ implements ChangeListener, ActionListene
         panel.add(doSetup);
         panel.add(appendError);
         panel.add(appendExc);
+        panel.add(createInstancePerSample);
         return panel;
     }
 
     private void initGui(){
         appendError.setSelected(false);
         appendExc.setSelected(false);
+        createInstancePerSample.setSelected(false);
         doSetup.setSelected(false);
         junit4.setSelected(false);
         filterpkg.setText(""); //$NON-NLS-1$
@@ -295,6 +298,7 @@ implements ChangeListener, ActionListene
         sampler.setDoNotSetUpTearDown(doSetup.isSelected());
         sampler.setAppendError(appendError.isSelected());
         sampler.setAppendException(appendExc.isSelected());
+        
sampler.setCreateOneInstancePerSample(createInstancePerSample.isSelected());
         sampler.setJunit4(junit4.isSelected());
     }
 
@@ -343,6 +347,7 @@ implements ChangeListener, ActionListene
         doSetup.setSelected(sampler.getDoNotSetUpTearDown());
         appendError.setSelected(sampler.getAppendError());
         appendExc.setSelected(sampler.getAppendException());
+        
createInstancePerSample.setSelected(sampler.getCreateOneInstancePerSample());
     }
 
     private void setupMethods(){

Modified: 
jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/sampler/JUnitSampler.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/sampler/JUnitSampler.java?rev=1173581&r1=1173580&r2=1173581&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/sampler/JUnitSampler.java
 (original)
+++ 
jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/sampler/JUnitSampler.java
 Wed Sep 21 12:06:02 2011
@@ -69,6 +69,8 @@ public class JUnitSampler extends Abstra
     private static final String APPEND_ERROR = "junitsampler.append.error";
     private static final String APPEND_EXCEPTION = 
"junitsampler.append.exception";
     private static final String JUNIT4 = "junitsampler.junit4";
+    private static final String 
CREATE_INSTANCE_PER_SAMPLE="junitsampler.createinstancepersample";
+    private static final boolean CREATE_INSTANCE_PER_SAMPLE_DEFAULT = false;
     //-- JMX file attributes - do not change
 
     private static final String SETUP = "setUp";
@@ -94,6 +96,7 @@ public class JUnitSampler extends Abstra
     private transient Protectable protectable;
 
     public JUnitSampler(){
+        super();
     }
 
     /**
@@ -356,6 +359,9 @@ public class JUnitSampler extends Abstra
 
     /** {@inheritDoc} */
     public SampleResult sample(Entry entry) {
+        if(getCreateOneInstancePerSample()) {
+            initializeTestObject();
+        }
         SampleResult sresult = new SampleResult();
         sresult.setSampleLabel(getName());// Bug 41522 - don't use rlabel here
         sresult.setSamplerData(className + "." + methodName);
@@ -621,16 +627,26 @@ public class JUnitSampler extends Abstra
         testCase = null;
         methodName = getMethod();
         className = getClassname();
-        final Method m;
         protectable = null;
+        if(!getCreateOneInstancePerSample()) {
+            // NO NEED TO INITIALIZE WHEN getCreateOneInstancePerSample 
+            // is true cause it will be done in sample
+            initializeTestObject();            
+        }
+    }
+
+    /**
+     * Initialize test object
+     */
+    private void initializeTestObject() {
         String rlabel = getConstructorString();
         if (rlabel.length()== 0) {
             rlabel = JUnitSampler.class.getName();
         }
-        this.testObject = getClassInstance(className,rlabel);
+        this.testObject = getClassInstance(className, rlabel);
         if (this.testObject != null){
             initMethodObjects(this.testObject);
-            m = getMethod(this.testObject,methodName);
+            final Method m = getMethod(this.testObject,methodName);
             if (getJunit4()){
                 Class<? extends Throwable> expectedException = None.class;
                 long timeout = 0;
@@ -673,4 +689,20 @@ public class JUnitSampler extends Abstra
             }
         }
     }
-}
+
+    /**
+     * 
+     * @param createOneInstancePerSample
+     */
+    public void setCreateOneInstancePerSample(boolean 
createOneInstancePerSample) {
+        this.setProperty(CREATE_INSTANCE_PER_SAMPLE, 
createOneInstancePerSample, CREATE_INSTANCE_PER_SAMPLE_DEFAULT);
+    }
+
+    /**
+     * 
+     * @return boolean create New Instance For Each Call
+     */
+    public boolean getCreateOneInstancePerSample() {
+        return getPropertyAsBoolean(CREATE_INSTANCE_PER_SAMPLE, 
CREATE_INSTANCE_PER_SAMPLE_DEFAULT);
+    }
+}
\ No newline at end of file

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1173581&r1=1173580&r2=1173581&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Wed Sep 21 12:06:02 2011
@@ -97,6 +97,7 @@ This can be overridden by setting the JM
 <li>Bug 51841 - JMS : If an error occurs in ReceiveSubscriber constructor or 
Publisher, then Connections will stay open</li>
 <li>Bug 51691 - Authorization does not work for JMS Publisher and JMS 
Subscriber</li>
 <li>Bug 51840 - JMS : Cache of InitialContext has some issues</li>
+<li>Bug 47888 - JUnit Sampler re-uses test object</li>
 </ul>
 
 <h3>Controllers</h3>

Modified: jakarta/jmeter/trunk/xdocs/images/screenshots/junit_sampler.png
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/junit_sampler.png?rev=1173581&r1=1173580&r2=1173581&view=diff
==============================================================================
Binary files - no diff available.

Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1173581&r1=1173580&r2=1173581&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Wed Sep 21 
12:06:02 2011
@@ -1425,7 +1425,7 @@ completed, so the net effect was similar
 
 
 
-<component name="JUnit Request" index="&sect-num;.1.16"  width="457" 
height="507" screenshot="junit_sampler.png">
+<component name="JUnit Request" index="&sect-num;.1.16"  width="397" 
height="536" screenshot="junit_sampler.png">
 <description>
 The current implementation supports standard Junit convention and extensions. 
It also
 includes extensions like oneTimeSetUp and oneTimeTearDown. The sampler works 
like the
@@ -1440,7 +1440,8 @@ In versions of JMeter after 2.3.1, you c
 <br></br>7. The sampler reports unexpected exceptions as errors.
 There are some important differences between standard JUnit test runners and 
JMeter's
 implementation. Rather than make a new instance of the class for each test, 
JMeter
-creates 1 instance per sampler and reuses it.<br></br>
+creates 1 instance per sampler and reuses it.
+This can be changed with checkbox "Create a new instance per sample".<br></br>
 The current implementation of the sampler will try to create an instance using 
the string constructor first. If the test class does not declare a string 
constructor, the sampler will look for an empty constructor. Example 
below:&lt;br>
 &lt;br>
 Empty Constructor:&lt;br>
@@ -1486,6 +1487,7 @@ Here are some general guidelines for wri
      this option should be checked.</property>
   <property name="Append assertion errors" required="Yes">Whether or not to 
append assertion errors to the response message.</property>
   <property name="Append runtime exceptions" required="Yes">Whether or not to 
append runtime exceptions to the response message. Only applies if "Append 
assertion errors" is not selected.</property>
+  <property name="Create a new Instance per sample" required="Yes">Whether or 
not to create a new JUnit instance for each sample. Defaults to false, meaning 
JUnit TestCase is created one and reused.</property>
 </properties>
 <p>
 The following JUnit4 annotations are recognised:



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@jakarta.apache.org
For additional commands, e-mail: notifications-h...@jakarta.apache.org

Reply via email to