Unit Test Framework Crashing LabVIEW Project

[Cross posted to LAVA]
OS: Windows 7
LabVIEW 2009, LabVIEW 2009 SP1. 
Howdy
If I create a project and add a VI and a unit test to it and save it, then delete the unit test, everything works.
If I do the above but put the unit test in a virtual folder then delete it, the project hangs and LabVIEW crashes.
I have tried this on multiple computers and get the same effect.
If it is an issue I thought this may have been fixed in 2009 SP1, but it is not.
I do not remember this happening in 8.6.1 but I was using VISTA at the time (if that is related?)
I get the same problem if I open an existing project with unit tests in it. 
Additionally I have noticed that the files from the unit test in Windows 7 have no "logo/icon" associated with them. I thought in VISTA they had the same icon as what is shown in the project - the green plus sign (but this was a while ago). 
Is this a known issue / can anyone else confirm this? 
Cheers
-JG 
Message Edited by jg-code on 04-13-2010 10:02 PM
Certified LabVIEW Architect * LabVIEW Champion

Hi Kyle 
Thank you for your quick reply.
I am having this problem on my work PC, home PC and a colleague's PC all running Windows 7 and 2009 SP1.
I have found the problem occurs if I create a new unit test OR drag and drop an existing unit test into the project.
Attached is a (jing) video of what is happening every time.
You will see that at the root level of the project (My Computer), I can remove the unit test with no problems at all.
But if it goes into a virtual folder and I try to remove it - then LabVIEW crashes. 
The attachment is in LV2009.SP1 and is the sane project as used in the video.
I look forward to your feedback on resolving this issue I am having.
Cheers
-JG 
Certified LabVIEW Architect * LabVIEW Champion
Attachments:
Test Project.zip ‏4 KB

Similar Messages

  • Test coverage in LabView Unit Test Framework

    Hi,
    can somebody from NI confirm the following two statements about the Unit Test Framework:
    1. The framework does not support "recursive coverage metrics", where the coverage considers sub-VIs that are executed in the VI under test.
    2. 100% coverage means something weaker that common "branch coverage". For example, an "if" VI is a branch in the program but it is not considered as a branch by LabView's test coverage metrics.
    Thanks,
    Peter

    Hello Johannes,
    I'm interested in branch coverage of a VI under test.
    Imagine a VI A that calls another VI B. If A is tested and LV's unit test framework reports 100% test coverage for A, it is possible that the test cases didn't visit all frames (branches) in B.
    Now my question is: is it possible that LV thinks of A as "flattened" so that all code in B is considered as code of A?
    Peter

  • Unit Test Framework for 8.6

    Hi all,
    Do we have Unit Test Framework Toolkit for LabVIEW 8.6?
    We have unit Test Framework Toolkit for LabVIEW 8.6.1(Uit Test Framework Toolkit 1.0)
    Thanks,
    Suresh Kumar.G

    John Harby <[email protected]> wrote:
    Did you ever find anything? We are looking too ...I have been reading a great book that has given me some ideas, but I have not
    solidified any proofs of concept as of yet. Check out Vincent Massol book JUnit
    in Action. He has some great working examples of Mock Objects and Stubs using
    Cactus and Jetty. What I am thinking is that in a seperate "Java Project" within
    the application, we can extend JUnit and create whatever global objects a process
    needs and then make SOAP based calls to the JPD, since the JPD is derived from
    a web service. So the other piece to this is experience Unit Testing SOAP...
    - Noam

  • JavaServer Faces Unit Test Framework

    Based on my knowledge, there isn't any handy JSF Unit test tools. To facilitate UI developers and QAs to do test, I have created a prototype project to evaluate a solution.
    For a Simple JSF enabled JSP file:
    <?xml version="1.0" encoding="UTF-8"?>
    <jsp:root version="1.2" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:jsp="http://java.sun.com/JSP/Page">
       <jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" />
         <f:view>
              <h:form>
                <h:outputText value="Please input:"/>
                   <h:inputText id="input1"/>
                <br/>
                <h:outputText value="Please input a integer:"/>
                   <h:inputText style="width:50px;" converter="javax.faces.Integer"/>
                <h:commandButton value="Submit"/>     
           </h:form>
       </f:view>
    </jsp:root>writing a HttpUnit to this page is obviously difficult:
    1) Hard to pin-point the html element rendered by input1, because up-level NamingContainer h:form is missing id.
    2) More difficult to find the second InputText, because missing two ids.
    3) How to assert if the converter really works or not, we can't assert any object in PageBean by HttpUnit.
    4) Much more difficult to find those html element if there are several level NamingContainer, such as the component nested within "for-loop".
    I perfer not to write HttpUnit and seperate JUnit to PageBean, so if the follow JSP can be used in both test and production environment, work will be much easier:
    * test1.jsp
    <?xml version="1.0" encoding="UTF-8"?>
    <jsp:root version="1.2" xmlns:test="http://www.yourcompany.com/jsf/test"  xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:jsp="http://java.sun.com/JSP/Page">
       <jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" />
         <f:view>
            <test:parameter name="abc" value="def"/><!-- setting request parameter -->
              <h:form>
                <h:outputText value="Please input:"/>
                   <h:inputText>
                   <test:set value="hello"
    /> <!-- emulate inputing "hello" to the text box -->
                   <test:assert phase="afterUpdateModelValues" description="InputText1" var="input1" value="#{input1=='hello'}"/><!-- you can try other JSF phases as well, here var "input1" is parent jsf component -->
                      <test:assert description="InputText1" var="input1" value="#{input1=='hello'}"/>
    <!-- use default phase "afterRenderResponse", here var "input1" is HtmlElement fetched from rendered page by HttpUnit -->
                </h:inputText>
                <br/>
                <h:inputText style="width:50px;" converter="javax.faces.Integer">
                   <test:set actions="all" value="123"/>
                   <test:assert phase="afterUpdateModelValues" description="Input2 Class Name" var="input2CN" value="#{input2CN.class.name == 'java.lang.Integer'}"/>
                   <test:assert description="InputText2 value in afterRenderResponse phase" var="input2" value="#{input2=='123'}"/>
                   <test:assert description="InputText2 Style" var="input2Style" valueAttribute="style" value="#{input2Style=='width:20px;height:25px;'}"/>
                </h:inputText>
                <br/>
                <h:commandButton value="Submit">
                   <test:action description="Test Sumbit"/><!-- support multi actions -->
                </h:commandButton>     
           </h:form>
       </f:view>
    </jsp:root> For production jsp you can use normal url, http://server:port/yourapp/faces/test1.jsp, those test:xxx components won't do anything.
    For testing a single page, http://server:port/yourapp/faces/TestAction?view=/test1.jsp
    For testing more pages, http://server:port/yourapp/faces/TestAction?suite=/suite1.xml and write file:
    * suite1.xml
    <?xml version='1.0' encoding='UTF-8'?>
    <TestSuite>
       <page>/test1.jsp</page>
       <page>/test2.jsp</page>
    </TestSuite> After running this test suite in sun jsf1.0 runtime, the result comes:
    <?xml version="1.0" encoding="UTF-8" ?>
    <Test suite="/suite1.xml">
      <Page id="/test1.jsp">
        <Action id="_id13" time="0 hour(s) 0 minute(s) 0 second(s) 31 millisecond(s)" description="Test Sumbit">
          <Assert id="_id5" description="InputText1">
             <afterUpdateModelValues pass="true" />
          </Assert>
          <Assert id="_id9" description="Input2 Class Name">
             <afterUpdateModelValues pass="true" />
          </Assert>
          <Assert id="_id6" description="InputText1">
             <afterRenderResponse pass="true" />
          </Assert>
          <Assert id="_id10" description="InputText2 value in afterRenderResponse phase">
             <afterRenderResponse pass="true" />
          </Assert>
          <Assert id="_id11" description="InputText2 Style">
             <afterRenderResponse pass="false" />
          </Assert>
        </Action>
      </Page>
      <Page id="/test2.jsp">
      </Page>
    </Test> So far, if you think this idea is good for you, you can get the src code at the end of this post.
    Furthermore, you can make improvement to this as well, such as implement concurrent and repeatable test.
    Anyway, don't expect this two days prototype is quite robust, and coding is not my day to day work either.
    If you have any questions or idea, please drop me a line: [email protected], [email protected]
    *  jsftest.tld
    <?xml version="1.0"?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
    <taglib>
         <tlib-version>1.0</tlib-version>
         <jsp-version>1.2</jsp-version>
         <short-name>test</short-name>
         <uri>http://www.yourcompany.com/jsf/test</uri>
         <display-name>JSF Test Tag Library</display-name>
         <description></description>
         <tag>
              <name>action</name>
              <tag-class>com.yourcompany.jsf.ui.test.taglib.ActionTag</tag-class>
              <body-content>empty</body-content>
              <display-name>Action</display-name>
              <description>JSF test submit action</description>
              <attribute>
                   <name>binding</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>id</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>description</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
         </tag>     
         <tag>
              <name>assert</name>
              <tag-class>com.yourcompany.jsf.ui.test.taglib.AssertTag</tag-class>
              <body-content>empty</body-content>
              <display-name>Assert</display-name>
              <description>JSF test assertion</description>
              <attribute>
                   <name>binding</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>id</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>actions</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>default value is "all", means all actions, use "," as delimeter</description>
              </attribute>
              <attribute>
                   <name>phase</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>effective value can be anyone of: afterRestoreView,
                                   beforeApplyRequestValues, afterApplyRequestValues,
                                   beforeProcessValidations, afterProcessValidations,
                                   beforeUpdateModelValues,  afterUpdateModelValues,
                                   beforeInvokeApplication,  afterInvokeApplication,
                                   beforeRenderResponse,     afterRenderResponse
                                 The default value is afterRenderResponse, this assertion will be applied to HtmlElement rather than JSF Component.
                            </description>
              </attribute>
              <attribute>
                   <name>value</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>must be boolean, means pass test or not</description>
              </attribute>
              <attribute>
                   <name>var</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>variable name, used to define a request attribute which can be used in valueBinding language</description>
              </attribute>
              <attribute>
                   <name>valueAttribute</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>The default is "value".
                                         var will be bound to this attribute.
                                         var will be bound to the rendered HtmlElement if the phase="afterRenderResponse",
                                         otherwise var will be bound to parent component.
                            </description>
              </attribute>
              <attribute>
                   <name>postback</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>The default is "true".
                                         Currently only support true;
                            </description>
              </attribute>
              <attribute>
                   <name>description</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
         </tag>
         <tag>
              <name>parameter</name>
              <tag-class>com.yourcompany.jsf.ui.test.taglib.ParameterTag</tag-class>
              <body-content>empty</body-content>
              <display-name>Set</display-name>
              <description>JSF test request parameter setter</description>
              <attribute>
                   <name>binding</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>id</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>actions</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>default value is "all", means all actions, use "," as delimeter</description>
              </attribute>
              <attribute>
                   <name>name</name>
                   <required>true</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>value</name>
                   <required>true</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
         </tag>
         <tag>
              <name>set</name>
              <tag-class>com.yourcompany.jsf.ui.test.taglib.SetTag</tag-class>
              <body-content>empty</body-content>
              <display-name>Set</display-name>
              <description>JSF test component value setter</description>
              <attribute>
                   <name>binding</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>id</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>actions</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>default value is "all", means all actions, use "," as delimeter</description>
              </attribute>
              <attribute>
                   <name>value</name>
                   <required>true</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
         </tag>
    </taglib>
    *  faces-config.xml
    <?xml version="1.0"?>
    <!DOCTYPE faces-config PUBLIC
      "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
      "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
    <faces-config>
      <component>
        <component-type>com.yourcompany.jsf.ui.test.Action</component-type>
        <component-class>com.yourcompany.jsf.ui.test.component.Action</component-class>
      </component>
      <component>
        <component-type>com.yourcompany.jsf.ui.test.Assert</component-type>
        <component-class>com.yourcompany.jsf.ui.test.component.Assert</component-class>
      </component>
      <component>
        <component-type>com.yourcompany.jsf.ui.test.Parameter</component-type>
        <component-class>com.yourcompany.jsf.ui.test.component.Parameter</component-class>
      </component>
      <component>
        <component-type>com.yourcompany.jsf.ui.test.Set</component-type>
        <component-class>com.yourcompany.jsf.ui.test.component.Set</component-class>
      </component>
      <lifecycle>
          <phase-listener>com.yourcompany.jsf.ui.test.listener.TestPhaseListener</phase-listener>
          <phase-listener>com.yourcompany.jsf.ui.test.listener.TestAssertPhaseListener</phase-listener>
      </lifecycle>
    </faces-config>
    *  TestPhaseListener.java
    package com.yourcompany.jsf.ui.test.listener;
    import java.io.InputStream;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Iterator;
    import java.util.List;
    import javax.faces.application.ViewHandler;
    import javax.faces.component.UIComponent;
    import javax.faces.component.UIViewRoot;
    import javax.faces.context.FacesContext;
    import javax.faces.context.ResponseWriter;
    import javax.faces.event.PhaseEvent;
    import javax.faces.event.PhaseId;
    import javax.faces.event.PhaseListener;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    import org.w3c.dom.Text;
    import com.meterware.httpunit.HTMLElement;
    import com.meterware.httpunit.PostMethodWebRequest;
    import com.meterware.httpunit.WebConversation;
    import com.meterware.httpunit.WebRequest;
    import com.meterware.httpunit.WebResponse;
    import com.sun.faces.renderkit.html_basic.HtmlResponseWriter;
    import com.yourcompany.jsf.ui.component.UIIterate;
    import com.yourcompany.jsf.ui.test.component.Action;
    import com.yourcompany.jsf.ui.test.component.Assert;
    import com.yourcompany.jsf.ui.test.component.Parameter;
    import com.yourcompany.jsf.ui.test.component.Set;
    import com.yourcompany.jsf.ui.test.report.Constants;
    import com.yourcompany.jsf.ui.test.report.TestAction;
    import com.yourcompany.jsf.ui.test.report.TestAssert;
    import com.yourcompany.jsf.ui.test.report.TestPage;
    import com.yourcompany.jsf.ui.test.report.TestReport;
    import com.yourcompany.jsf.ui.util.ComponentUtil;
    public class TestPhaseListener implements PhaseListener {
         public TestPhaseListener() {
              super();
              // TODO Auto-generated constructor stub
         /* (non-Javadoc)
          * @see javax.faces.event.PhaseListener#afterPhase(javax.faces.event.PhaseEvent)
         public void afterPhase(PhaseEvent event) {
              if(-1 != event.getFacesContext().getViewRoot().getViewId().indexOf("TestAction")){
                   FacesContext context =      event.getFacesContext();
                   ViewHandler vh = context.getApplication().getViewHandler();
                   HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
                   TestReport report = new TestReport();
                   request.getSession().setAttribute(Constants.TEST_REPORT_SESSION_ATTRIBUTE_ID, report);
                   String suitefile = request.getParameter("suite");
                   List pages = new ArrayList(5);
                   if(suitefile==null){
                        pages.add(request.getParameter("view"));
                   }else{
                        report.setSuiteId(suitefile);
                        try{
                             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                          factory.setValidating(false);
                          factory.setNamespaceAware(false);
                          DocumentBuilder builder = factory.newDocumentBuilder();
                          InputStream ins = context.getExternalContext().getResourceAsStream(suitefile);
                          Document doc = builder.parse(ins);
                          NodeList pageNodes = doc.getElementsByTagName("page");
                          for(int i=0; i<pageNodes.getLength(); i++){
                               pages.add(((Text)pageNodes.item(i).getFirstChild()).getData());
                        }catch(Exception e){
                             report.setException(e);
                   for(Iterator p=pages.iterator(); p.hasNext(); ){
                        String viewId = (String)p.next();
                        UIViewRoot view = vh.restoreView(context, viewId);
                        if(view==null){
                             try{
                                WebConversation wc = new WebConversation();
                                wc.putCookie("JSESSIONID", request.getSession().getId());
                                String url = getUrl(request, viewId);
                                WebResponse wr = wc.getResponse(url);
                             }catch(Exception e){
                                  report.setException(e);
                             view = vh.restoreView(context, viewId);
                        try{
                             Method doActionMethod = TestPhaseListener.class.getDeclaredMethod("doAction", new Class[]{Action.class, FacesContext.class, HttpServletRequest.class, UIViewRoot.class, String.class});
                             ComponentUtil.iterateComponent(view, Action.class, this, doActionMethod, new Object[]{context, request, view, viewId});
                        }catch(Exception e){
                             report.setException(e);
                   //render report
                   renderReport(context, report);
                   request.getSession().removeAttribute(Constants.TEST_REPORT_SESSION_ATTRIBUTE_ID);
                   context.responseComplete();
         /* (non-Javadoc)
          * @see javax.faces.event.PhaseListener#beforePhase(javax.faces.event.PhaseEvent)
         public void beforePhase(PhaseEvent event) {
         /* (non-Javadoc)
          * @see javax.faces.event.PhaseListener#getPhaseId()
         public PhaseId getPhaseId() {
               return PhaseId.RESTORE_VIEW;
         private String getUrl(HttpServletRequest request, String viewId){
              return request.getScheme()+"://" + request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/faces"+viewId;
         protected void doAction(Action action, FacesContext context, HttpServletRequest request, UIViewRoot view, String viewId){
              try{
                      WebConversation wc = new WebConversation();
                      wc.putCookie("JSESSIONID", request.getSession().getId());
                      String url = getUrl(request, viewId);
                      WebRequest wrq = new PostMethodWebRequest(url);
                      wrq.setParameter(Constants.TEST_VIEW_PARAMETER, viewId);
                      wrq.setParameter(Constants.TEST_ACTION_PARAMETER, action.getId());
                      //set parameters
                      try{
                           Method doParameterMethod = TestPhaseListener.class.getDeclaredMethod("doParameter", new Class[]{Parameter.class, String.class, WebRequest.class});
                           ComponentUtil.iterateComponent(view, Parameter.class, this, doParameterMethod, new Object[]{action.getId(), wrq});
                      }catch(Exception e){
                           e.printStackTrace();
                      //set attributes
                      //set values
                      try{
                           Method doSetMethod = TestPhaseListener.class.getDeclaredMethod("doSet", new Class[]{Set.class, FacesContext.class, String.class, WebRequest.class});
                           ComponentUtil.iterateComponent(view, Set.class, this, doSetMethod, new Object[]{context, action.getId(), wrq});
                      }catch(Exception e){
                           e.printStackTrace();
                      //do test actions
                      String formId = null;
                      if(formId!=null)wrq.removeParameter(formId);
                      formId = ComponentUtil.getForm(action).getClientId(context);
                      wrq.setParameter(formId, action.getParent().getClientId(context));
                      long start = System.currentTimeMillis();
                      WebResponse wrp = wc.getResponse(wrq);
                      //System.out.println(wrp.getText());
                      //do assertions
                      try{
                           Method doAssertMethod = TestPhaseListener.class.getDeclaredMethod("doAssert", new Class[]{Assert.class, FacesContext.class, HttpServletRequest.class, String.class, String.class, String.class, WebResponse.class});
                           ComponentUtil.iterateComponent(view, Assert.class, this, doAssertMethod, new Object[]{context, request, viewId, action.getId(), action.getDescription(), wrp});
                      }catch(Exception e){
                           e.printStackTrace();
                      TestReport report = (TestReport)request.getSession().getAttribute(Constants.TEST_REPORT_SESSION_ATTRIBUTE_ID);
                     report.getPage(viewId).getAction(action.getId()).setTime(System.currentTimeMillis()-start);
                   }catch(Exception e){
                        e.printStackTrace();
         protected void doParameter(Parameter parameter, String actionId, WebRequest wrq){
               if("all".equals(parameter.getActions()) || Arrays.asList(parameter.getActions().split(",")).contains(actionId))wrq.setParameter(parameter.getName(), parameter.getValue());
         protected void doSet(Set set, FacesContext context, String actionId, WebRequest wrq){
               if("all".equals(set.getActions()) || Arrays.asList(set.getActions().split(",")).contains(actionId))wrq.setParameter(set.getParent().getClientId(context), set.getValue());
         protected void doAssert(Assert ast, FacesContext context, HttpServletRequest request, String viewId, String actionId, String actionDescription, WebResponse wrp){
              if(("all".equals(ast.getActions()) || Arrays.asList(ast.getActions().split(",")).contains(actionId)) && "afterRenderResponse".equals(ast.getPhase())){
                    TestReport report = (TestReport)request.getSession().getAttribute(Constants.TEST_REPORT_SESSION_ATTRIBUTE_ID);
                    try{
                         HTMLElement targetElement = wrp.getElementWithID(ast.getParent().getClientId(context));
                         if(targetElement==null)targetElement = wrp.getElementsWithName(ast.getParent().getClientId(context))[0];
                         if(targetElement==null)request.setAttribute(ast.getVar(), null);
                         else request.setAttribute(ast.getVar(), targetElement.getAttribute(ast.getValueAttribute()));
                         //report assert
                         report.report(viewId, actionId, actionDescription, ast.getId(), ast.getDescription(), ast.getPhase(), (Boolean)ast.getValue(), null);
                    }catch(Exception e){
                         report.report(viewId, actionId, actionDescription, ast.getId(), ast.getDescription(), ast.getPhase(), Boolean.FALSE, e);
         protected void renderReport(FacesContext context, TestReport report){
              try{
                   HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getResponse();
                   response.setContentType("text/xml; charset=UTF-8");
                   response.setHeader("Cache-Control", "no-cache");
                   ResponseWriter writer = new HtmlResponseWriter(response.getWriter(), null, null);
                   context.setResponseWriter(writer);
                   writer.startDocument();
                   writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
                   writer.startElement("Test", null);
                   if(report.getSuiteId()!=null)writer.writeAttribute("suite", report.getSuiteId(), null);
                   for(Iterator p=report.listPages().iterator(); p.hasNext(); ){
                        TestPage page = (TestPage)p.next();
                        writer.startElement("Page", null);
                        writer.writeAttribute("id", page.getViewId(), null);
                        for(Iterator i=page.listActions().iterator(); i.hasNext(); ){
                             TestAction action = (TestAction)i.next();
                             writer.startElement("Action", null);
                             writer.writeAttribute("id", action.getId(), null);
                             writer.writeAttribute("time", getElapsedTime(action.getTime()), null);
                             if(action.getDescription()!=null)writer.writeAttribute("description", action.getDescription(), null);
                             for(Iterator j=action.getAsserts().values().iterator(); j.hasNext(); ){
                                  TestAssert ast = (TestAssert)j.next();
                                  writer.startElement("Assert", null);
                                  writer.writeAttribute("id", ast.getId(), null);
                                  if(ast.getDescription()!=null)writer.writeAttribute("description", ast.getDescription(), null);
                                  for(Iterator k=ast.getStatus().keySet().iterator(); k.hasNext(); ){
                                       String phase = (String)k.next();
                                       writer.startElement(phase, null);
                                       writer.writeAttribute("pass", ast.getStatus().get(phase).toString(), null);
                                       writer.endElement(phase);
                                  if(ast.getException()!=null){
                                       writer.startElement("Exception", null);
                                       StackTraceElement[] stack = ast.getException().getStackTrace();
                                       for(int m=0; m<stack.length; m++){
                                            writer.write(stack[m].toString());
                                            writer.write("\r\n");
                                       writer.endElement("Exception");
                                  writer.endElement("Assert");
                             if(action.getException()!=null){
                                  writer.startElement("Exception", null);
                                  StackTraceElement[] stack = action.getException().getStackTrace();
                                  for(int m=0; m<stack.length; m++){
                                       writer.write(stack[m].toString());
                                       writer.write("\r\n");
                                  writer.endElement("Exception");
                             writer.endElement("Action");
                        if(page.getException()!=null){
                             writer.startElement("Exception", null);
                             StackTraceElement[] stack = page.getException().getStackTrace();
                             for(int m=0; m<stack.length; m++){
                                  writer.write(stack[m].toString());
                                  writer.write("\r\n");
                             writer.endElement("Exception");
                        writer.endElement("Page");
                   if(report.getException()!=null){
                        writer.startElement("Exception", null);
                        StackTraceElement[] stack = report.getException().getStackTrace();
                        for(int m=0; m<stack.length; m++){
                             writer.write(stack[m].toString());
                             writer.write("\r\n");
                        writer.endElement("Exception");
                   writer.endElement("Test");
                   writer.endDocument();
                   response.getWriter().flush();
                   response.getWriter().close();
              }catch(Exception e){
                   e.printStackTrace();
          public static String getElapsedTime(long millis) {
                   long hours, minutes, seconds, ms;
                   hours = millis / 3600000;
                   millis = millis - (hours * 3600000);
                   minutes = millis / 60000;
                   millis = millis - (minutes * 60000);
                   seconds = millis / 1000;
                   ms = millis - (seconds * 1000);
                   return hours
                        + " hour(s) "
                        + minutes
                        + " minute(s) "
                        + seconds
                        + " second(s) "
                        + ms
                        + " millisecond(s)";
    *  TestAssertPhaseListener.java
    package com.yourcompany.jsf.ui.test.listener;
    import java.lang.reflect.Method;
    import java.util.Arrays;
    import javax.faces.component.UIViewRoot;
    import javax.faces.context.FacesContext;
    import javax.faces.event.PhaseEvent;
    import javax.faces.event.PhaseId;
    import javax.faces.event.PhaseListener;
    import javax.servlet.http.HttpServletRequest;
    import org.apache.commons.beanutils.PropertyUtils;
    import com.yourcompany.jsf.ui.test.component.Assert;
    import com.yourcompany.jsf.ui.test.report.Constants;
    import com.yourcompany.jsf.ui.test.report.TestReport;
    import com.yourcompany.jsf.ui.util.ComponentUtil;
    public class TestAssertPhaseListener implements PhaseListener {
         public TestAssertPhaseListener() {
              super();
              // TODO Auto-generated constructor stub
         /* (non-Javadoc)
          * @see javax.faces.event.PhaseListener#afterPhase(javax.faces.event.PhaseEvent)
         public void afterPhase(PhaseEvent event) {
              if(PhaseId.RENDER_RESPONSE.equals(event.getPhaseId()))return;
              iterateAssert(event, false);
         /* (non-Javadoc)
          * @see javax.faces.event.PhaseListener#beforePhase(javax.faces.event.PhaseEvent)
         public void beforePhase(PhaseEvent event) {
              if(PhaseId.RESTORE_VIEW.equals(event.getPhaseId()))return;
              iterateAssert(event, true);
         public PhaseId getPhaseId() {
               return PhaseId.ANY_PHASE;
         protected void iterateAssert(PhaseEvent event, boolean before){
              FacesContext context = event.getFacesContext();
              HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
              String viewId = request.getParameter(Constants.TEST_VIEW_PARAMETER);
              String actionId = request.getParameter(Constants.TEST_ACTION_PARAMETER);
              if(actionId!=null){
                   TestReport report = (TestReport)request.getSession().getAttribute(Constants.TEST_REPORT_SESSION_ATTRIBUTE_ID);
                   UIViewRoot view = context.getViewRoot();
                   if(view==null)return;
                   try{
                        Method doAssertMethod = TestAssertPhaseListener.class.getDeclaredMethod("doAssert", new Class[]{Assert.class, FacesContext.class, HttpServletRequest.class, String.class, String.class, String.class});
                        ComponentUtil.iterateComponent(view, Assert.class, this, doAssertMethod, new Object[]{context, request, viewId, actionId, this.getAssertPhase(event.getPhaseId(), before)});
                   }catch(Exception e){
                        report.getPage(viewId).getAction(actionId).setException(e);
         protected void doAssert(Assert ast, FacesContext context, HttpServletRequest request, String viewId, String actionId, String assertPhase){
               if(("all".equals(ast.getActions()) || Arrays.asList(ast.getActions().split(",")).contains(actionId)) && assertPhase.equals(ast.getPhase())){
                    TestReport report = (TestReport)request.getSession().getAttribute(Constants.TEST_REPORT_SESSION_ATTRIBUTE_ID);
                    try{
                         request.setAttribute(ast.getVar(), PropertyUtils.getProperty(ast.getParent(), ast.getValueAttribute()));
                         //report assert
                         report.report(viewId, actionId, null, ast.getId(), ast.getDescription(), ast.getPhase(), (Boolean)ast.getValue(), null);
                    }catch(Exception e){
                         report.report(viewId, actionId, null, ast.getId(), ast.getDescription(), ast.getPhase(), Boolean.FALSE, e);
         protected String getAssertPhase(PhaseId phaseId, boolean before){
              String perfix = before ? "before" : "after";
              if(PhaseId.RESTORE_VIEW.equals(phaseId))return perfix+"RestoreView";
              if(PhaseId.APPLY_REQUEST_VALUES.equals(phaseId))return perfix+"ApplyRequestValues";
              if(PhaseId.PROCESS_VALIDATIONS.equals(phaseId))return perfix+"ProcessValidations";
              if(PhaseId.UPDATE_MODEL_VALUES.equals(phaseId))return perfix+"UpdateModelValues";
              if(PhaseId.INVOKE_APPLICATION.equals(phaseId))return perfix+"InvokeApplication";
              if(before && PhaseId.RENDER_RESPONSE.equals(phaseId))return "beforeRenderResponse";
              return "";
    *  UIIterate.java
    // This class brings "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              

    To Neoreborn:
    If I understand right, Shale only provides some mock core JSF objects and extends JUnit so that you can do junit test to your java classes.
    What I concern is to test Pages(JSP) rather than java classes. I want to assert component attribute values within all lifecycle including rendered HTML script. Currently, there isn't any good tools to do this kind of JSP Unit test, am I right?

  • Unit Test Framework Bug: Removing a test vector file causes LV to crash

    Labview 2010 f2 crashes every time I try to remove a test vector file from a project.
    Repro:
    1. Start Labview and open a new project.
    2. Save the project.
    3. Right-click My Computer and select New -> Test Vectors
    4. Right-click the new file (Untitled.lvvect) and select Remove From Project
    I've tried various combinations of renaming the test vector file, trying multiple vector files, etc., but the end result is the same.  LV always crashes when I try to remove the vector file from the project.  LV crashes when I try to remove it even if I delete the vector file from disk before loading it from disk.  The only way I can remove a vector file from a project once the project has been saved is by editing the .lvproj file directly.

    Update:  I believe the last error is a different issue.  I was able to narrow the error down to a specific library and generate some error logs.  That library hasn't had any code changes in over a month.  The error logs point to something in the f2 patch, which I installed last Thursday.  Unfortunately there doesn't appear to be any way to uninstall the patch.
    I can send the guilty code via email or ftp if you need them.
    Attachments:
    lvlog2010-11-03-11-12-03.txt ‏6 KB
    lvlog2010-11-03-12-00-02.txt ‏4 KB

  • Running unit tests on inline hardware custom device

    How to do unit tests for Inline Hardware Custom Devices?
    I get this error after creating a unit test.
    Possible reason(s):
    Cannot connect to the target. Please ensure that the VI Server setting is enabled and deployed to the target. Also, make sure that the port number is correct and that this machine is allowed to connect through VI Server.

    wegunterjrASI, 
    I have a few follow up questions for you to gain a better understanding of your application: 
    1). What are you using to do the unit test (NI’s unit test framework or VI tester from JKI)?
    2). What are you conducting the unit test on (RT Driver or something on the host machine)? 
    3). Are the unit test VIs under the target in the LabVIEW project? 
    4). Are you able to run a simple unit test? 
    Screenshots are always appreciated. 
    Regards, 
     

  • Trouble Running Unit Tests on Device

    I am having trouble running multiple unit test on my device. I am using JMUnit as part of NetBeans IDE 5.5.1. I can get the tests running in the emulator but when I try them on the phone they don't work. Under my project's properties->Application Descriptor->MIDlets->MIDlets in the Suite, the 'jmunit.framework.cldc11.TestSuite' comes up in red with the error 'Some MIDlet classes are invalid'. I am using CDLC 1.1 and MIDP 2.0. Any ideas?

    wegunterjrASI, 
    I have a few follow up questions for you to gain a better understanding of your application: 
    1). What are you using to do the unit test (NI’s unit test framework or VI tester from JKI)?
    2). What are you conducting the unit test on (RT Driver or something on the host machine)? 
    3). Are the unit test VIs under the target in the LabVIEW project? 
    4). Are you able to run a simple unit test? 
    Screenshots are always appreciated. 
    Regards, 
     

  • Some Thoughts On An OWB Performance/Testing Framework

    Hi all,
    I've been giving some thought recently to how we could build a performance tuning and testing framework around Oracle Warehouse Builder. Specifically, I'm looking at was in which we can use some of the performance tuning techniques described in Cary Millsap/Jeff Holt's book "Optimizing Oracle Performance" to profile and performance tune mappings and process flows, and to use some of the ideas put forward in Kent Graziano's Agile Methods in Data Warehousing paper http://www.rmoug.org/td2005pres/graziano.zip and Steven Feuernstein's utPLSQL project http://utplsql.sourceforge.net/ to provide an agile/test-driven way of developing mappings, process flows and modules. The aim of this is to ensure that the mappings we put together are as efficient as possible, work individually and together as expected, and are quick to develop and test.
    At the moment, most people's experience of performance tuning OWB mappings is firstly to see if it runs set-based rather than row-based, then perhaps to extract the main SQL statement and run an explain plan on it, then check to make sure indexes etc are being used ok. This involves a lot of manual work, doesn't factor in the data available from the wait interface, doesn't store the execution plans anywhere, and doesn't really scale out to encompass entire batches of mapping (process flows).
    For some background reading on Cary Millsap/Jeff Holt's approach to profiling and performance tuning, take a look at http://www.rittman.net/archives/000961.html and http://www.rittman.net/work_stuff/extended_sql_trace_and_tkprof.htm. Basically, this approach traces the SQL that is generated by a batch file (read: mapping) and generates a file that can be later used to replay the SQL commands used, the explain plans that relate to the SQL, details on what wait events occurred during execution, and provides at the end a profile listing that tells you where the majority of your time went during the batch. It's currently the "preferred" way of tuning applications as it focuses all the tuning effort on precisely the issues that are slowing your mappings down, rather than database-wide issues that might not be relevant to your mapping.
    For some background information on agile methods, take a look at Kent Graziano's paper, this one on test-driven development http://c2.com/cgi/wiki?TestDrivenDevelopment , this one http://martinfowler.com/articles/evodb.html on agile database development, and the sourceforge project for utPLSQL http://utplsql.sourceforge.net/. What this is all about is having a development methodology that builds in quality but is flexible and responsive to changes in customer requirements. The benefit of using utPLSQL (or any unit testing framework) is that you can automatically check your altered mappings to see that they still return logically correct data, meaning that you can make changes to your data model and mappings whilst still being sure that it'll still compile and run.
    Observations On The Current State of OWB Performance Tuning & Testing
    At present, when you build OWB mappings, there is no way (within the OWB GUI) to determine how "efficient" the mapping is. Often, when building the mapping against development data, the mapping executes quickly and yet when run against the full dataset, problems then occur. The mapping is built "in isolation" from its effect on the database and there is no handy tool for determining how efficient the SQL is.
    OWB doesn't come with any methodology or testing framework, and so apart from checking that the mapping has run, and that the number of rows inserted/updated/deleted looks correct, there is nothing really to tell you whether there are any "logical" errors. Also, there is no OWB methodology for integration testing, unit testing, or any other sort of testing, and we need to put one in place. Note - OWB does come with auditing, error reporting and so on, but there's no framework for guiding the user through a regime of unit testing, integration testing, system testing and so on, which I would imagine more complete developer GUIs come with. Certainly there's no built in ability to use testing frameworks such as utPLSQL, or a part of the application that let's you record whether a mapping has been tested, and changes the test status of mappings when you make changes to ones that they are dependent on.
    OWB is effectively a code generator, and this code runs against the Oracle database just like any other SQL or PL/SQL code. There is a whole world of information and techniques out there for tuning SQL and PL/SQL, and one particular methodology that we quite like is the Cary Millsap/Jeff Holt "Extended SQL Trace" approach that uses Oracle diagnostic events to find out exactly what went on during the running of a batch of SQL commands. We've been pretty successful using this approach to tune customer applications and batch jobs, and we'd like to use this, together with the "Method R" performance profiling methodology detailed in the book "Optimising Oracle Performance", as a way of tuning our generated mapping code.
    Whilst we want to build performance and quality into our code, we also don't want to overburden developers with an unwieldy development approach, because what we'll know will happen is that after a short amount of time, it won't get used. Given that we want this framework to be used for all mappings, it's got to be easy to use, cause minimal overhead, and have results that are easy to interpret. If at all possible, we'd like to use some of the ideas from agile methodologies such as eXtreme Programming, SCRUM and so on to build in quality but minimise paperwork.
    We also recognise that there are quite a few settings that can be changed at a session and instance level, that can have an effect on the performance of a mapping. Some of these include initialisation parameters that can change the amount of memory assigned to the instance and the amount of memory subsequently assigned to caches, sort areas and the like, preferences that can be set so that indexes are preferred over table scans, and other such "tweaks" to the Oracle instance we're working with. For reference, the version of Oracle we're going to use to both run our code and store our data is Oracle 10g 10.1.0.3 Enterprise Edition, running on Sun Solaris 64-bit.
    Some initial thoughts on how this could be accomplished
    - Put in place some method for automatically / easily generating explain plans for OWB mappings (issue - this is only relevant for mappings that are set based, and what about pre- and post- mapping triggers)
    - Put in place a method for starting and stopping an event 10046 extended SQL trace for a mapping
    - Put in place a way of detecting whether the explain plan / cost / timing for a mapping changes significantly
    - Put in place a way of tracing a collection of mappings, i.e. a process flow
    - The way of enabling tracing should either be built in by default, or easily added by the OWB developer. Ideally it should be simple to switch it on or off (perhaps levels of event 10046 tracing?)
    - Perhaps store trace results in a repository? reporting? exception reporting?
    at an instance level, come up with some stock recommendations for instance settings
    - identify the set of instance and session settings that are relevant for ETL jobs, and determine what effect changing them has on the ETL job
    - put in place a regime that records key instance indicators (STATSPACK / ASH) and allows reports to be run / exceptions to be reported
    - Incorporate any existing "performance best practices" for OWB development
    - define a lightweight regime for unit testing (as per agile methodologies) and a way of automating it (utPLSQL?) and of recording the results so we can check the status of dependent mappings easily
    other ideas around testing?
    Suggested Approach
    - For mapping tracing and generation of explain plans, a pre- and post-mapping trigger that turns extended SQL trace on and off, places the trace file in a predetermined spot, formats the trace file and dumps the output to repository tables.
    - For process flows, something that does the same at the start and end of the process. Issue - how might this conflict with mapping level tracing controls?
    - Within the mapping/process flow tracing repository, store the values of historic executions, have an exception report that tells you when a mapping execution time varies by a certain amount
    - get the standard set of preferred initialisation parameters for a DW, use these as the start point for the stock recommendations. Identify which ones have an effect on an ETL job.
    - identify the standard steps Oracle recommends for getting the best performance out of OWB (workstation RAM etc) - see OWB Performance Tips http://www.rittman.net/archives/001031.html and Optimizing Oracle Warehouse Builder Performance http://www.oracle.com/technology/products/warehouse/pdf/OWBPerformanceWP.pdf
    - Investigate what additional tuning options and advisers are available with 10g
    - Investigate the effect of system statistics & come up with recommendations.
    Further reading / resources:
    - Diagnosing Performance Problems Using Extended Trace" Cary Millsap
    http://otn.oracle.com/oramag/oracle/04-jan/o14tech_perf.html
    - "Performance Tuning With STATSPACK" Connie Dialeris and Graham Wood
    http://www.oracle.com/oramag/oracle/00-sep/index.html?o50tun.html
    - "Performance Tuning with Statspack, Part II" Connie Dialeris and Graham Wood
    http://otn.oracle.com/deploy/performance/pdf/statspack_tuning_otn_new.pdf
    - "Analyzing a Statspack Report: A Guide to the Detail Pages" Connie Dialeris and Graham Wood
    http://www.oracle.com/oramag/oracle/00-nov/index.html?o60tun_ol.html
    - "Why Isn't Oracle Using My Index?!" Jonathan Lewis
    http://www.dbazine.com/jlewis12.shtml
    - "Performance Tuning Enhancements in Oracle Database 10g" Oracle-Base.com
    http://www.oracle-base.com/articles/10g/PerformanceTuningEnhancements10g.php
    - Introduction to Method R and Hotsos Profiler (Cary Millsap, free reg. required)
    http://www.hotsos.com/downloads/registered/00000029.pdf
    - Exploring the Oracle Database 10g Wait Interface (Robin Schumacher)
    http://otn.oracle.com/pub/articles/schumacher_10gwait.html
    - Article referencing an OWB forum posting
    http://www.rittman.net/archives/001031.html
    - How do I inspect error logs in Warehouse Builder? - OWB Exchange tip
    http://www.oracle.com/technology/products/warehouse/pdf/Cases/case10.pdf
    - What is the fastest way to load data from files? - OWB exchange tip
    http://www.oracle.com/technology/products/warehouse/pdf/Cases/case1.pdf
    - Optimizing Oracle Warehouse Builder Performance - Oracle White Paper
    http://www.oracle.com/technology/products/warehouse/pdf/OWBPerformanceWP.pdf
    - OWB Advanced ETL topics - including sections on operating modes, partition exchange loading
    http://www.oracle.com/technology/products/warehouse/selfserv_edu/advanced_ETL.html
    - Niall Litchfield's Simple Profiler (a creative commons-licensed trace file profiler, based on Oracle Trace Analyzer, that displays the response time profile through HTMLDB. Perhaps could be used as the basis for the repository/reporting part of the project)
    http://www.niall.litchfield.dial.pipex.com/SimpleProfiler/SimpleProfiler.html
    - Welcome to the utPLSQL Project - a PL/SQL unit testing framework by Steven Feuernstein. Could be useful for automating the process of unit testing mappings.
    http://utplsql.sourceforge.net/
    Relevant postings from the OTN OWB Forum
    - Bulk Insert - Configuration Settings in OWB
    http://forums.oracle.com/forums/thread.jsp?forum=57&thread=291269&tstart=30&trange=15
    - Default Performance Parameters
    http://forums.oracle.com/forums/thread.jsp?forum=57&thread=213265&message=588419&q=706572666f726d616e6365#588419
    - Performance Improvements
    http://forums.oracle.com/forums/thread.jsp?forum=57&thread=270350&message=820365&q=706572666f726d616e6365#820365
    - Map Operator performance
    http://forums.oracle.com/forums/thread.jsp?forum=57&thread=238184&message=681817&q=706572666f726d616e6365#681817
    - Performance of mapping with FILTER
    http://forums.oracle.com/forums/thread.jsp?forum=57&thread=273221&message=830732&q=706572666f726d616e6365#830732
    - Poor mapping performance
    http://forums.oracle.com/forums/thread.jsp?forum=57&thread=275059&message=838812&q=706572666f726d616e6365#838812
    - Optimizing Mapping Performance With OWB
    http://forums.oracle.com/forums/thread.jsp?forum=57&thread=269552&message=815295&q=706572666f726d616e6365#815295
    - Performance of mapping with FILTER
    http://forums.oracle.com/forums/thread.jsp?forum=57&thread=273221&message=830732&q=706572666f726d616e6365#830732
    - Performance of the OWB-Repository
    http://forums.oracle.com/forums/thread.jsp?forum=57&thread=66271&message=66271&q=706572666f726d616e6365#66271
    - One large JOIN or many small ones?
    http://forums.oracle.com/forums/thread.jsp?forum=57&thread=202784&message=553503&q=706572666f726d616e6365#553503
    - NATIVE PL SQL with OWB9i
    http://forums.oracle.com/forums/thread.jsp?forum=57&thread=270273&message=818390&q=706572666f726d616e6365#818390
    Next Steps
    Although this is something that I'll be progressing with anyway, I'd appreciate any comment from existing OWB users as to how they currently perform performance tuning and testing. Whilst these are perhaps two distinct subject areas, they can be thought of as the core of an "OWB Best Practices" framework and I'd be prepared to write the results up as a freely downloadable whitepaper. With this in mind, does anyone have an existing best practices for tuning or testing, have they tried using SQL trace and TKPROF to profile mappings and process flows, or have you used a unit testing framework such as utPLSQL to automatically test the set of mappings that make up your project?
    Any feedback, add it to this forum posting or send directly through to me at [email protected]. I'll report back on a proposed approach in due course.

    Hi Mark,
    interesting post, but I think you may be focusing on the trees, and losing sight of the forest.
    Coincidentally, I've been giving quite a lot of thought lately to some aspects of your post. They relate to some new stuff I'm doing. Maybe I'll be able to answer in more detail later, but I do have a few preliminary thoughts.
    1. 'How efficient is the generated code' is a perennial topic. There are still some people who believe that a code generator like OWB cannot be in the same league as hand-crafted SQL. I answered that question quite definitely: "We carefully timed execution of full-size runs of both the original code and the OWB versions. Take it from me, the code that OWB generates is every bit as fast as the very best hand-crafted and fully tuned code that an expert programmer can produce."
    The link is http://www.donnapkelly.pwp.blueyonder.co.uk/generated_code.htm
    That said, it still behooves the developer to have a solid understanding of what the generated code will actually do, such as how it will take advantage of indexes, and so on. If not, the developer can create such monstrosities as lookups into an un-indexed field (I've seen that).
    2. The real issue is not how fast any particular generated mapping runs, but whether or not the system as a whole is fit for purpose. Most often, that means: does it fit within its batch update window? My technique is to dump the process flow into Microsoft Project, and then to add the timings for each process. That creates a Critical Path, and then I can visually inspect it for any bottleneck processes. I usually find that there are not more than one or two dogs. I'll concentrate on those, fix them, and re-do the flow timings. I would add this: the dogs I have seen, I have invariably replaced. They were just garbage, They did not need tuning at all - just scrapping.
    Gee, but this whole thing is minimum effort and real fast! I generally figure that it takes maybe a day or two (max) to soup up system performance to the point where it whizzes.
    Fact is, I don't really care whether there are a lot of sub-optimal processes. All I really care about is performance of the system as a whole. This technique seems to work for me. 'Course, it depends on architecting the thing properly in the first place. Otherwise, no amount of tuning of going to help worth a darn.
    Conversely (re. my note about replacing dogs) I do not think I have ever tuned a piece of OWB-generated code. Never found a need to. Not once. Not ever.
    That's not to say I do not recognise the value of playing with deployment configuration parameters. Obviously, I set auditing=none, and operating mode=set based, and sometimes, I play with a couple of different target environments to fool around with partitioning, for example. Nonetheless, if it is not a switch or a knob inside OWB, I do not touch it. This is in line with my dictat that you shall use no other tool than OWB to develop data warehouses. (And that includes all documentation!). (OK, I'll accept MS Project)
    Finally, you raise the concept of a 'testing framework'. This is a major part of what I am working on at the moment. This is a tough one. Clearly, the developer must unit test each mapping in a design-model-deploy-execute cycle, paying attention to both functionality and performance. When the developer is satisifed, that mapping will be marked as 'done' in the project workbook. Mappings will form part of a stream, executed as a process flow. Each process flow will usually terminate in a dimension, a fact, or an aggregate. Each process flow will be tested as an integrated whole. There will be test strategies devised, and test cases constructed. There will finally be system tests, to verify the validity of the system as a production-grade whole. (stuff like recovery/restart, late-arriving data, and so on)
    For me, I use EDM (TM). That's the methodology I created (and trademarked) twenty years ago: Evolutionary Development Methodology (TM). This is a spiral methodology based around prototyping cycles within Stage cycles within Release cycles. For OWB, a Stage would consist (say) of a Dimensional update. What I am trying to now is to graft this within a traditional waterfall methodology, and I am having the same difficulties I had when I tried to do it then.
    All suggestions on how to do that grafting gratefully received!
    To sum up, I 'm kinda at a loss as to why you want to go deep into OWB-generated code performance stuff. Jeepers, architect the thing right, and the code runs fast enough for anyone. I've worked on ultra-large OWB systems, including validating the largest data warehouse in the UK. I've never found any value in 'tuning' the code. What I'd like you to comment on is this: what will it buy you?
    Cheers,
    Donna
    http://www.donnapkelly.pwp.blueyonder.co.uk

  • BUG: Debug Unit tests in Selected

    I think I've found a bug in JDeveloper.
    Using "Debug Unit Tests in Selected" does not all unit tests in the selected projects.
    To reproduce:
    -select a list of projects,
    -right click and select "Debug Unit Tests in Selected".
    Results:
    -JDev will run all the unit tests in the last project selected but no others.
    What it should do:
    -JDev should run all unit tests in all selected projects
    System properties:
    About
    Oracle JDeveloper 11g Release 1 11.1.1.2.0
    Studio Edition Version 11.1.1.2.0
    Build JDEVADF_11.1.1.2.0_GENERIC_091029.2229.5536
    Copyright © 1997, 2009 Oracle and/or its affiliates. All rights reserved.
    IDE Version: 11.1.1.2.36.55.36
    Product ID: oracle.jdeveloper
    Product Version: 11.1.1.2.36.55.36
    Version
    Component     Version
    =========     =======
    ADF Business Components     11.1.1.55.36
    Java(TM) Platform     1.6.0_14
    Oracle IDE     11.1.1.2.36.55.36
    SOA Composite Editor     11.1.1.2.0.12.16
    Versioning Support     11.1.1.2.36.55.36
    Properties
    Name     Value
    ====     =====
    awt.toolkit     sun.awt.windows.WToolkit
    ceditor.java.parse.large     1500
    ceditor.java.parse.small     300
    class.load.environment     oracle.ide.boot.IdeClassLoadEnvironment
    class.load.log.level     CONFIG
    class.transfer     delegate
    compiler.vmargs     -Xmx512m
    EDITOR_J2SE_VERSION     1.5
    feedbackmanager.disable     false
    file.encoding     Cp1252
    file.encoding.pkg     sun.io
    file.separator     \
    http.agent     Mozilla/5.0 (Java 1.6.0_14; Windows XP 5.1 x86; en_CA) ICEbrowser/v6_1_3
    ice.browser.forcegc     false
    ice.pilots.html4.ignoreNonGenericFonts     true
    ice.pilots.html4.tileOptThreshold     0
    ide.bootstrap.start     209766300466
    ide.build     JDEVADF_11.1.1.2.0_GENERIC_091029.2229.5536
    ide.conf     C:\Oracle\Middleware\jdeveloper\jdev\bin\jdev.conf
    ide.config_pathname     C:\Oracle\Middleware\jdeveloper\jdev\bin\jdev.conf
    ide.debugbuild     false
    ide.devbuild     false
    ide.editions     oracle.studio, oracle.j2ee, oracle.jdeveloper
    ide.extension.role.search.path     jdev/roles
    ide.extension.search.path     jdev/extensions:sqldeveloper/extensions
    ide.feedbackmanager.customer     false
    ide.firstrun     false
    ide.java.maxversion     1.7
    ide.java.minversion     1.6.0_04
    ide.launcherProcessId     5376
    ide.main.class     oracle.ide.boot.IdeLauncher
    ide.max.jar.handles     500
    ide.patches.dir     jdev/lib/patches
    ide.pref.dir     C:\Documents and Settings\m_robinson\Application Data\JDeveloper
    ide.pref.dir.base     C:\Documents and Settings\m_robinson\Application Data
    ide.product     oracle.jdeveloper
    ide.shell.enableFileTypeAssociation     C:\Oracle\Middleware\jdeveloper\jdeveloper.exe
    ide.splash.screen     splash.gif
    ide.startingArg0     C:\Oracle\Middleware\jdeveloper\jdeveloper.exe
    ide.startingcwd     C:\Oracle\Middleware\jdeveloper
    ide.throttleLocale     true
    ide.user.dir     C:\Documents and Settings\m_robinson\Application Data\JDeveloper
    ide.user.dir.var     JDEV_USER_HOME,JDEV_USER_DIR
    ide.work.dir     C:\\JDeveloper
    ide.work.dir.base     C:\Documents and Settings\m_robinson\My Documents
    ilog.propagatesPropertyEditors     false
    inJUIDesigntime     true
    insight.suppresshidden     true
    INSIGHT_OMIT_HIDDEN     true
    java.awt.graphicsenv     sun.awt.Win32GraphicsEnvironment
    java.awt.printerjob     sun.awt.windows.WPrinterJob
    java.class.path     ..\..\ide\lib\ide-boot.jar
    java.class.version     50.0
    java.endorsed.dirs     C:\Oracle\Middleware\jdk160_14_R27.6.5-32\jre\lib\endorsed
    java.ext.dirs     C:\Oracle\Middleware\jdk160_14_R27.6.5-32\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
    java.home     C:\Oracle\Middleware\jdk160_14_R27.6.5-32\jre
    java.io.tmpdir     C:\DOCUME~1\M_ROBI~1\LOCALS~1\Temp\
    java.library.path     C:\Oracle\Middleware\jdeveloper;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\oraclexe\app\oracle\product\10.2.0\server\bin;C:\Ora\Forms10g\jdk\jre\bin\classic;C:\Ora\Forms10g\jdk\jre\bin;C:\Ora\Forms10g\jdk\jre\bin\client;C:\Ora\Forms10g\jlib;C:\Ora\Forms10g\bin;C:\Ora\Forms10g\jre\1.4.2\bin\client;C:\Ora\Forms10g\jre\1.4.2\bin;C:\Ora\Orant\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\system32\WindowsPowerShell\v1.0;C:\Program Files\Intel\DMIX;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\NTRU Cryptosystems\NTRU TCG Software Stack\bin\;C:\Program Files\Wave Systems Corp\Gemalto\Access Client\v5\;C:\Program Files\TortoiseHg\;C:\Program Files\JProbe 8.3\bin;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\Java\jre6\bin;C:\Program Files\GnuWin32\bin;C:\Tools\Mercurial;C:\cygwin\bin;C:\Oracle\Middleware\jdk160_14_R27.6.5-32\bin;C:\Oracle\Middleware\jdeveloper\ant\bin
    java.naming.factory.initial     oracle.javatools.jndi.LocalInitialContextFactory
    java.naming.factory.url.pkgs     weblogic.jndi.factories:weblogic.corba.j2ee.naming.url
    java.protocol.handler.pkgs     oracle.fabric.common.uddiurl.handler|oracle.jdevimpl.handler|weblogic.net
    java.runtime.name     Java(TM) SE Runtime Environment
    java.runtime.version     1.6.0_14-b08
    java.specification.name     Java Platform API Specification
    java.specification.vendor     Sun Microsystems Inc.
    java.specification.version     1.6
    java.vendor     Sun Microsystems Inc.
    java.vendor.url     http://java.sun.com/
    java.vendor.url.bug     http://java.sun.com/cgi-bin/bugreport.cgi
    java.version     1.6.0_14
    java.vm.info     mixed mode
    java.vm.name     Java HotSpot(TM) Client VM
    java.vm.specification.name     Java Virtual Machine Specification
    java.vm.specification.vendor     Sun Microsystems Inc.
    java.vm.specification.version     1.0
    java.vm.vendor     Sun Microsystems Inc.
    java.vm.version     14.0-b16
    javax.rmi.CORBA.PortableRemoteObjectClass     weblogic.iiop.PortableRemoteObjectDelegateImpl
    javax.rmi.CORBA.UtilClass     weblogic.iiop.UtilDelegateImpl
    javax.xml.parsers.DocumentBuilderFactory     oracle.xml.jaxp.JXDocumentBuilderFactory
    jbo.debugoutput     silent
    jbo.showdebugwarningbanner     false
    jps.authz     NULL
    line.separator     \r\n
    oracle.adfm.usemds     false
    oracle.home     C:\Oracle\Middleware\jdeveloper\
    oracle.j2ee.extension.status     enabled
    oracle.jbo.usemds     false
    oracle.jdbc.Trace     true
    oracle.jdeveloper.webservice.hidePropertyOverride     false
    oracle.jdeveloper.webservice.showAllOwsmPolicyTypes     false
    oracle.mds.internal.config.override.emptystore     true
    oracle.security.jps.config     /C:/Documents and Settings/m_robinson/Application Data/JDeveloper/system11.1.1.2.36.55.36/DefaultDomain/config/fmwconfig/jps-config-jse.xml
    oracle.soap.transport.noHTTPClient     true
    oracle.translated.locales     de,es,fr,it,ja,ko,pt_BR,zh_CN,zh_TW
    oracle.xdkjava.compatibility.version     9.0.4
    org.omg.CORBA.ORBClass     weblogic.corba.orb.ORB
    org.omg.CORBA.ORBSingletonClass     weblogic.corba.orb.ORB
    os.arch     x86
    os.name     Windows XP
    os.version     5.1
    path.separator     ;
    reserved_filenames     con,aux,prn,lpt1,lpt2,lpt3,lpt4,lpt5,lpt6,lpt7,lpt8,lpt9,com1,com2,com3,com4,com5,com6,com7,com8,com9,conin$,conout,conout$
    sun.arch.data.model     32
    sun.awt.disablegrab     true
    sun.awt.keepWorkingSetOnMinimize     true
    sun.boot.class.path     ../lib/lwawt.jar;C:\Oracle\Middleware\jdk160_14_R27.6.5-32\jre\lib\resources.jar;C:\Oracle\Middleware\jdk160_14_R27.6.5-32\jre\lib\rt.jar;C:\Oracle\Middleware\jdk160_14_R27.6.5-32\jre\lib\sunrsasign.jar;C:\Oracle\Middleware\jdk160_14_R27.6.5-32\jre\lib\jsse.jar;C:\Oracle\Middleware\jdk160_14_R27.6.5-32\jre\lib\jce.jar;C:\Oracle\Middleware\jdk160_14_R27.6.5-32\jre\lib\charsets.jar;C:\Oracle\Middleware\jdk160_14_R27.6.5-32\jre\classes
    sun.boot.library.path     C:\Oracle\Middleware\jdk160_14_R27.6.5-32\jre\bin
    sun.cpu.endian     little
    sun.cpu.isalist     pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86
    sun.desktop     windows
    sun.io.unicode.encoding     UnicodeLittle
    sun.java2d.noddraw     true
    sun.jnu.encoding     Cp1252
    sun.management.compiler     HotSpot Client Compiler
    sun.os.patch.level     Service Pack 3
    svnkit.sax.useDefault     true
    user.country     CA
    user.dir     C:\Oracle\Middleware\jdeveloper\jdev\bin
    user.home     C:\Documents and Settings\m_robinson
    user.language     en
    user.name     m_robinson
    user.timezone     America/Los_Angeles
    user.variant     
    wasp.location     ../../uddi
    weblogic.home     C:\Oracle\Middleware\wlserver_10.3\server
    weblogic.security.SSL.ignoreHostnameVerification     true
    weblogic.security.TrustKeyStore     DemoTrust
    windows.shell.font.languages     en
    Extensions
    Name     Identifier     Version     Status
    ====     ==========     =======     ======
    ADF Business Components     oracle.BC4J     11.1.1.2.36.55.36     Loaded
    ADF Business Components Dependency     oracle.bc4j.dependency     11.1.1.2.36.55.36     Loaded
    ADF Business Components Deployment     oracle.bc4jdt.deploy     11.1.1.2.36.55.36     Loaded
    ADF Business Components Modeler     oracle.adfbcdt.modeler     11.1.1.2.36.55.36     Loaded
    ADF Business Components Tester     oracle.bc4j.tester     11.1.1.2.36.55.36     Loaded
    ADF Context Debugger     oracle.adf.share.debug     11.1.1.2.36.55.36     Loaded
    ADF Controller Configuration Design Time     oracle.adf.controller.config.dt     11.1.1.2.36.55.36     Loaded
    ADF Data Visualizations Design Time Tests     oracle.dvt.dt     11.1.1.2.36.55.36     Loaded
    ADF Debugger     oracle.adf.debug     11.1.1.2.36.55.36     Loaded
    ADF Debugger Diagram Support     oracle.adf.debug.diagram     11.1.1.2.36.55.36     Loaded
    ADF Desktop Integration Design Time     oracle.adfdt.desktopintegration     11.1.1.2.36.55.36     Loaded
    ADF Faces Cache     oracle.webcache     11.1.1.2.36.55.36     Loaded
    ADF Faces Data Visualization Tools Help     oracle.dvt-faces-doc     11.1.1.0.0     Loaded
    ADF Faces Databinding Design Time     oracle.adf-faces-databinding-dt     11.1.1.2.36.55.36     Loaded
    ADF Faces Design Time     oracle.adf-faces-dt     11.1.1.2.36.55.36     Loaded
    ADF Faces Design Time Migration     oracle.adffacesdt.migration     11.1.1.2.36.55.36     Loaded
    ADF Faces Runtime Help     oracle.adf-faces-rt-doc     11.1.1.0.0     Loaded
    ADF Faces Skin Design Time     oracle.adf-faces-skin-dt     11.1.1.2.36.55.36     Loaded
    ADF Java Server Faces Diagram     oracle.adf.jsf.diagram     11.1.1.2.36.55.36     Loaded
    ADF Library Design Time     oracle.jdeveloper.adflibrary     11.1.1.2.36.55.36     Loaded
    ADF Lifecycle Design Time     oracle.adf.lifecycle.dt     11.1.1.2.36.55.36     Loaded
    ADF Management Pages     oracle.adf.management     11.1.1.2.36.55.36     Loaded
    ADF Menu Model Design-Time     oracle.adfmenudt     11.1.1.2.36.55.36     Loaded
    ADF Page Flow Design Time     oracle.adf.pageflow.dt     11.1.1.2.36.55.36     Loaded
    ADF Page Flow Design Time Extras     oracle.adf.pageflow.dt.extras     11.1.1.2.36.55.36     Loaded
    ADF Page Template DT     oracle.adf-faces-templating-dt     11.1.1.2.36.55.36     Loaded
    ADF Region Design Time     oracle.adf-faces-region-dt     11.1.1.2.36.55.36     Loaded
    ADF Struts Page Flow Modeler     oracle.struts.adf     11.1.1.2.36.55.36     Loaded
    ADF Struts and Model One Databinding     oracle.adf.struts.and.model.one.databinding.dt     11.1.1.2.36.55.36     Loaded
    ADF Swing     oracle.adfdt.swingcore     11.1.1.2.36.55.36     Loaded
    ADF View Debugging Design Time     adf.view.debugging.dt     11.1.1.2.36.55.36     Loaded
    ADFv Common Databinding     oracle.adf-view-databinding-dt     11.1.1.2.36.55.36     Loaded
    AIA Composite Application Framework     oracle.aia.caf.cafextensionwizard     2.4     Loaded
    Ant     oracle.ant     11.1.1.2.36.55.36     Loaded
    Application Server Manager     oracle.jdeveloper.asnav     11.1.1.2.36.55.36     Loaded
    Application State - Application Navigator     oracle.ideimpl.appstate.appnav     11.1.1.2.36.55.36     Loaded
    Application State - Editors     oracle.ide.appstate.editors     11.1.1.2.36.55.36     Loaded
    Application State Manager     oracle.ide.appstate     11.1.1.2.36.55.36     Loaded
    Archive Compare     oracle.jdeveloper.archive-compare     11.1.1.2.36.55.36     Loaded
    BAM     oracle.bam     11.1.1     Loaded
    BI Beans Graph     oracle.bibeans     11.1.1.2.36.55.36     Loaded
    BM metamodel framework     oracle.bm.meta     11.1.1.2.36.55.36     Loaded
    Bug Reporter     oracle.jdeveloper.bugfiler     11.1.1.2.36.55.36     Loaded
    Business Modelers     oracle.bm     11.1.1.2.36.55.36     Loaded
    Check For Updates     oracle.ide.webupdate     11.1.1.2.36.55.36     Loaded
    Code Editor     oracle.ide.ceditor     11.1.1.2.36.55.36     Loaded
    Command Line Formatting Support     oracle.jdeveloper.ojformat     11.1.1.2.36.55.36     Loaded
    Command Line Make/Rebuild Support     oracle.jdevimpl.oj-compiler     11.1.1.2.36.55.36     Loaded
    Common Controller Design-Time     oracle.controller.dt     11.1.1.2.36.55.36     Loaded
    Common Page Flow Design-Time     oracle.pageflow.dt     11.1.1.2.36.55.36     Loaded
    Component Palette     oracle.ide.palette1     11.1.1.2.36.55.36     Loaded
    Controller to ADF Bindings Bridge     oracle.controller.bindings.dt     11.1.1.2.36.55.36     Loaded
    Database Connection Support     oracle.jdeveloper.db.connection     11.1.1.2.36.55.36     Loaded
    Database Features (JDeveloper)     oracle.jdeveloper.db     11.1.1.2.36.55.36     Loaded
    Database Features (SQLDeveloper in JDeveloper)     oracle.jdeveloper.db.navigator     11.1.1.2.36.55.36     Loaded
    Database Modeler     oracle.dbmodeler     11.1.1.2.36.55.36     Loaded
    Database Modeler Migration     oracle.dbmodeler.migrate     11.1.1.2.36.55.36     Loaded
    Database Object Dependency API Support     oracle.jdeveloper.db.dependency     11.1.1.2.36.55.36     Loaded
    Database Object Explorers     oracle.ide.db.explorer     11.1.1.2.36.55.36     Loaded
    Database Object Transfer Framework     oracle.jdeveloper.db.transfer     11.1.1.2.36.55.36     Loaded
    Database UI     oracle.ide.db     11.1.1.2.36.55.36     Loaded
    Design Time Resource Bundle Variable Resolver     oracle.jdeveloper.resourcebundle.resolver.dt     11.1.1.2.36.55.36     Loaded
    Diagram Framework     oracle.diagram     11.1.1.2.36.55.36     Loaded
    Diagram Framework Toplink extensions     oracle.diagram.toplink     11.1.1.2.36.55.36     Loaded
    Diagram Javadoc Extension     oracle.diagram.javadoc     11.1.1.2.36.55.36     Loaded
    Diagram Thumbnail     oracle.diagram.thumbnail     11.1.1.2.36.55.36     Loaded
    Diagram to XMLEF Bridge     oracle.diagram.xmlef     11.1.1.2.36.55.36     Loaded
    Diff/Merge     oracle.ide.diffmerge     11.1.1.2.36.55.36     Loaded
    EJB     oracle.ejb     11.1.1.2.36.55.36     Loaded
    EJB Modeler     oracle.ejbmodeler     11.1.1.2.36.55.36     Loaded
    ESDK Sample - CodeInteraction     oracle.ide.extsamples.codeinteraction     11.1.1     Loaded
    Editor Tint     oracle.ide.ceditor-tint     11.1.1.2.36.55.36     Loaded
    Editor Tint (Java)     oracle.jdeveloper.ceditor-tint-java     11.1.1.2.36.55.36     Loaded
    Extended IDE Platform     oracle.javacore     11.1.1.2.36.55.36     Loaded
    Extension Designtime Core     oracle.jdeveloper.extensiondt.core     11.1.1.2.36.55.36     Loaded
    Extension Designtime UI     oracle.jdeveloper.extensiondt.ui     11.1.1.2.36.55.36     Loaded
    External Tools     oracle.ide.externaltools     11.1.1.2.36.55.36     Loaded
    Feedback     oracle.ide.feedback     11.1.1.2.36.55.36     Loaded
    File Support     oracle.ide.files     11.1.1.2.36.55.36     Loaded
    Fusion Application Overview Definition     oracle.ide.appoverview.fusion.definition     11.1.1.2.36.55.36     Loaded
    Fusion Web Application (ADF) Template     oracle.adf.webapp.template     11.1.1.2.36.55.36     Loaded
    Go to File     oracle.ide.gotofile     11.1.1.2.36.55.36     Loaded
    Go to Java Type     oracle.jdeveloper.gotojava     11.1.1.2.36.55.36     Loaded
    HTML     oracle.html     11.1.1.2.36.55.36     Loaded
    Help System     oracle.ide.help     11.1.1.2.36.55.36     Loaded
    History Support     oracle.jdeveloper.history     11.1.1.2.36.55.36     Loaded
    IDE Reports Extension     oracle.ide.report     11.1.1.2.36.55.36     Loaded
    Import/Export Support     oracle.ide.importexport     11.1.1.2.36.55.36     Loaded
    Index Migrator support     oracle.ideimpl.indexing-migrator     11.1.1.2.36.55.36     Loaded
    J2EE     oracle.j2ee     11.1.1.2.36.55.36     Loaded
    J2EE     oracle.j2ee.webapp.ve     11.1.1.2.36.55.36     Loaded
    J2EE     oracle.j2ee.webapp.ve.facelets     11.1.1.2.36.55.36     Loaded
    J2EE CSS     oracle.css     11.1.1.2.36.55.36     Loaded
    J2EE Faces Config     oracle.j2ee.facesconfig     11.1.1.2.36.55.36     Loaded
    J2EE Web App     oracle.j2ee.webapp     11.1.1.2.36.55.36     Loaded
    J2EE-ADRS     oracle.j2ee.adrs     11.1.1.2.36.55.36     Loaded
    J2ee extension help     oracle.j2ee.help     11.1.1.0.0     Loaded
    JDeveloper     oracle.jdeveloper     11.1.1.2.36.55.36     Loaded
    JDeveloper Runner     oracle.jdeveloper.runner     11.1.1.2.36.55.36     Loaded
    JGoodies Forms     oracle.jdeveloper.jgoodies     11.1.1.2.36.55.36     Loaded
    JPublisher     oracle.jdeveloper.db.jpub     11.1.1.2.36.55.36     Loaded
    JSON Language support     oracle.jdeveloper.json     11.1.1.2.36.55.36     Loaded
    JUnit Integration     oracle.jdeveloper.junit     11.1.1.2.36.55.36     Loaded
    JViews Registration Addin     oracle.diagram.registration     11.1.1.2.36.55.36     Loaded
    Java Annotation Inspector     oracle.jdeveloper.annotation.inspector     11.1.1.2.36.55.36     Loaded
    Java Breadcrumbs     oracle.jdeveloper.ceditor-breadcrumbs-java     11.1.1.2.36.55.36     Loaded
    Java Class Modeler     oracle.javamodeler     11.1.1.2.36.55.36     Loaded
    Java Modeler Toplink extensions     oracle.javamodeler.toplink     11.1.1.2.36.55.36     Loaded
    Java Server Faces Page Flow Modeler     oracle.jsfmod     11.1.1.2.36.55.36     Loaded
    Java Structure Compare     oracle.jdeveloper.java-compare     11.1.1.2.36.55.36     Loaded
    Java Type Search     oracle.jdeveloper.searchbar.java     11.1.1.2.36.55.36     Loaded
    Java extension help     oracle.java.help     11.1.1.0.0     Loaded
    JavaBeans, Swing, and AWT     oracle.swingawt     11.1.1.2.36.55.36     Loaded
    JavaScript Language Support     oracle.ide.javascript     11.1.1.2.36.55.36     Loaded
    Jdeveloper UI Editor     oracle.jdeveloper.uieditor     11.1.1.2.36.55.36     Loaded
    Jdeveloper XML Extension     oracle.jdeveloper.xml     11.1.1.2.36.55.36     Loaded
    Legacy Controller Design-Time     oracle.controller.bm.dt     11.1.1.2.36.55.36     Loaded
    Legacy Preferences integration for BM     oracle.modeler.bm.prefs     11.1.1.2.36.55.36     Loaded
    Log Window     oracle.ide.log     11.1.1.2.36.55.36     Loaded
    MDS Extension     oracle.mds     11.1.1.2.36.55.36     Loaded
    MOF Ide Integration     oracle.mof.ide     11.1.1.2.36.55.36     Loaded
    MOF Modeler Integration     oracle.modeler.mof     11.1.1.2.36.55.36     Loaded
    Mac OS X Adapter     oracle.ideimpl.apple     11.1.1.2.36.55.36     Loaded
    Modeler Framework     oracle.modeler     11.1.1.2.36.55.36     Loaded
    Modeler Framework Common Layer     oracle.modeler.common     11.1.1.2.36.55.36     Loaded
    Modelling migration from BM     oracle.modeler.bm.migrate     11.1.1.2.36.55.36     Loaded
    Navigator     oracle.ide.navigator     11.1.1.2.36.55.36     Loaded
    Nightly Indexing support     oracle.ideimpl.indexing-rt     11.1.1.2.36.55.36     Loaded
    OAR/MAR/SAR Deployment Support Extension     oracle.deploy.orapp     11.1.1.2.36.55.36     Loaded
    OWSM Policy Manager Installer     oracle.jdeveloper.webservice.wsmpm.installer     11.1.1.2.36.55.36     Loaded
    Object Gallery     oracle.ide.gallery     11.1.1.2.36.55.36     Loaded
    Object Viewer     oracle.sqldeveloper.oviewer     11.1.1.63.05     Loaded
    Offline Database     oracle.jdeveloper.offlinedb     11.1.1.2.36.55.36     Loaded
    Offline Database Import/Generate     oracle.jdeveloper.offlinedb.transfer     11.1.1.2.36.55.36     Loaded
    Offline Database Reports Extension     oracle.jdeveloper.offlinedb.report     11.1.1.2.36.55.36     Loaded
    Offline Database SXML     oracle.jdeveloper.offlinedb.sxml     11.1.1.2.36.55.36     Loaded
    Offline Database User Properties     oracle.jdeveloper.offlinedb.userprops     11.1.1.2.36.55.36     Loaded
    Offline Database User Properties SXML     oracle.jdeveloper.offlinedb.userprops.sxml     11.1.1.2.36.55.36     Loaded
    Oracle BPEL Designer     oracle.bpm.modeler     11.1.1.2.0.12.16     Loaded
    Oracle BPEL Designer Plugins     oracle.bpm.modeler.plugins     11.1.1.2.0.12.16     Loaded
    Oracle BPM DVM     oracle.bpm.dvm     11.1.1.2.0.12.16     Loaded
    Oracle BPM XREF     oracle.bpm.xref     11.1.1.2.0.12.16     Loaded
    Oracle Business Rules Designer     oracle.bpm.rules     11.1.1.2.0.12.16     Loaded
    Oracle Database Browser     oracle.sqldeveloper.thirdparty.browsers     11.1.1.63.05     Loaded
    Oracle ESS Designer     oracle.bpm.ess     11.1.1.2.0.12.16     Loaded
    Oracle Enterprise Repository Adapter     oracle.jdeveloper.rcoeradapter     11.1.1.2.36.55.36     Loaded
    Oracle Enterprise Repository Editor     oracle.jdeveloper.oereditor     11.1.1.2.36.55.36     Loaded
    Oracle Events Designer     oracle.bpm.events     11.1.1.2.0.12.16     Loaded
    Oracle Fabric Plugins     oracle.sca.modeler.plugins     11.1.1.2.0.12.16     Loaded
    Oracle Human Task Designer     oracle.bpm.workflow     11.1.1.2.0.12.16     Loaded
    Oracle IDE     oracle.ide     11.1.1.2.36.55.36     Loaded
    Oracle JDeveloper Spring 2 Integration     oracle.sca.spring2     11.1.1.2.0.12.16     Loaded
    Oracle JDevloper Deployment Core Module     oracle.deploy.core     11.1.1.2.36.55.36     Loaded
    Oracle MDS Design time     oracle.mds.dt     11.1.1.2.36.55.36     Loaded
    Oracle Mobile ADF     oracle.wireless.dt     11.1.1.2.36.55.36     Loaded
    Oracle Page Templates     oracle.adf-page-template-samples     11.1.1.2.36.55.36     Loaded
    Oracle SOA Composite Editor     oracle.sca.modeler     11.1.1.2.0.12.16     Loaded
    Oracle SOA Mediator     oracle.sca.mediator     11.1.1.2.0.12.16     Loaded
    Oracle SQL Developer     oracle.sqldeveloper     11.1.1.63.05     Loaded
    Oracle SQL Developer Reports     oracle.sqldeveloper.report     11.1.1.63.05     Loaded
    Oracle SQL Developer Worksheet     oracle.sqldeveloper.worksheet     11.1.1.63.05     Loaded
    Oracle XML Schema Support     oracle.sqldeveloper.xmlschema     11.1.1.63.05     Loaded
    PL/SQL Debugger     oracle.jdeveloper.db.debug.plsql     11.1.1.2.36.55.36     Loaded
    PROBE Debugger     oracle.jdeveloper.db.debug.probe     11.1.1.2.36.55.36     Loaded
    Peek     oracle.ide.peek     11.1.1.2.36.55.36     Loaded
    Persistent Storage     oracle.ide.persistence     11.1.1.2.36.55.36     Loaded
    Profiler     oracle.jdeveloper.profiler     11.1.1.2.36.55.36     Loaded
    Properties File Support     oracle.jdeveloper.props     11.1.1.2.36.55.36     Loaded
    Property Inspector     oracle.ide.inspector     11.1.1.2.36.55.36     Loaded
    Quick Start Features for Web Applications     quickstart.webapp.dt     11.1.1.2.36.55.36     Loaded
    QuickDiff     oracle.ide.quickdiff     11.1.1.2.36.55.36     Loaded
    REST Web Services     oracle.jdeveloper.webservice.rest     11.1.1.0.0     Loaded
    Refactoring     oracle.jdeveloper.refactoring     11.1.1.2.36.55.36     Loaded
    Replace With     oracle.ide.replace     11.1.1.2.36.55.36     Loaded
    Reports Extension     oracle.javatools.report     11.1.1.2.36.55.36     Loaded
    Resource Bundle Support     oracle.ide.resourcebundle     11.1.1.2.36.55.36     Loaded
    Resource Bundle Support for Properties Files     oracle.jdeveloper.resourcebundle.props     11.1.1.2.36.55.36     Loaded
    Resource Catalog Application Server Adapter     oracle.jdeveloper.asadapter     11.1.1.2.36.55.36     Loaded
    Resource Catalog DB UI extension     oracle.jdeveloper.db.rcadapter.ui     11.1.1.2.36.55.36     Loaded
    Resource Catalog Database Adapter     oracle.jdeveloper.rcdbadapter     11.1.1.2.36.55.36     Loaded
    Resource Catalog WSIL Adapter     oracle.jdeveloper.rcwsiladapter     11.1.1.2.36.55.36     Loaded
    Resource Lookup     oracle.jdeveloper.rclookup     11.1.1.2.36.55.36     Loaded
    Runner     oracle.ide.runner     11.1.1.2.36.55.36     Loaded
    SQL*Plus Integration     oracle.jdeveloper.db.sqlplus     11.1.1.2.36.55.36     Loaded
    SQLJ     oracle.jdeveloper.sqlj     11.1.1.2.36.55.36     Loaded
    Search Bar     oracle.ide.searchbar     11.1.1.0.0     Loaded
    SearchBar Commands     oracle.ide.searchbar.commands     11.1.1.2.36.55.36     Loaded
    Searchbar Preferences     oracle.ide.searchbar.preferences     11.1.1.2.36.55.36     Loaded
    Snippet Window     oracle.sqldeveloper.snippet     11.1.1.63.05     Loaded
    Struts Page Flow Modeler     oracle.struts     11.1.1.2.36.55.36     Loaded
    Studio     oracle.studio     11.1.1.2.36.55.36     Loaded
    Studio extension help     oracle.studio.help     11.1.1.0.0     Loaded
    Template     oracle.ide.ceditor-template     11.1.1.2.36.55.36     Loaded
    TopLink     oracle.toplink     11.1.1.2.36.55.36     Loaded
    Trinidad Databinding Design Time     oracle.trinidad-databinding-dt     11.1.1.2.36.55.36     Loaded
    Trinidad Design Time     oracle.trinidad-dt     11.1.1.2.36.55.36     Loaded
    UDDI Resource Catalogue Provider     oracle.jdevimpl.uddiadapter     11.1.1.2.36.55.36     Loaded
    UML XMI     oracle.uml.v2.xmi     11.1.1.2.36.55.36     Loaded
    UML v2     oracle.uml.v2     11.1.1.2.36.55.36     Loaded
    UML v2 Activity Modeler     oracle.uml.v2.activity     11.1.1.2.36.55.36     Loaded
    UML v2 Class Diagram     oracle.uml.v2.clazz     11.1.1.2.36.55.36     Loaded
    UML v2 Migration     oracle.uml.v2.migrate     11.1.1.2.36.55.36     Loaded
    UML v2 Sequence Diagram     oracle.uml.v2.sequence     11.1.1.2.36.55.36     Loaded
    UML v2 Transformation to Java     oracle.uml.v2.umljava     11.1.1.2.36.55.36     Loaded
    UML v2 Use Case Diagram     oracle.uml.v2.usecase     11.1.1.2.36.55.36     Loaded
    UML2 Modelers Common Classes     oracle.uml.v2.modeler     11.1.1.2.36.55.36     Loaded
    URL Connection     oracle.jdevimpl.urlconn     11.1.1.2.36.55.36     Loaded
    VHV     oracle.ide.vhv     11.1.1.2.36.55.36     Loaded
    Versioning Support     oracle.jdeveloper.vcs     11.1.1.2.36.55.36     Loaded
    Versioning Support for Subversion     oracle.jdeveloper.subversion     11.1.1.2.36.55.36     Loaded
    Virtual File System     oracle.ide.vfs     11.1.1.2.36.55.36     Loaded
    WSDL Chooser     oracle.jdeveloper.wsdllookup     11.1.1.0.0     Loaded
    WSDL web services extension     oracle.jdevimpl.wsdl     11.1.1.2.36.55.36     Loaded
    Web Browser and Proxy     oracle.ide.webbrowser     11.1.1.2.36.55.36     Loaded
    Web Services     oracle.jdeveloper.webservice     11.1.1.0.0     Loaded
    WebDAV Connection Support     oracle.jdeveloper.webdav2     11.1.1.2.36.55.36     Loaded
    WebStart     oracle.j2ee.webstart     11.1.1.0.0     Loaded
    XML Compare     oracle.jdeveloper.xml-compare     11.1.1.2.36.55.36     Loaded
    XML Editing Framework IDE Extension     oracle.ide.xmlef     11.1.1.2.36.55.36     Loaded
    XML Editing Framework Java Integration     oracle.jdeveloper.xmlef     11.1.1.2.36.55.36     Loaded
    XSL Mapper     oracle.bpm.mapper     11.1.1.2.0.12.16     Loaded
    adf-deploy-dt     oracle.adfdt.common.deploy     11.1.1.2.36.55.36     Loaded
    adf-deploy-dt-mds     oracle.adfdt.common.deploy.mds     11.1.1.2.36.55.36     Loaded
    adf-installer-ide     adf.installer.dt     11.1.1.2.36.55.36     Loaded
    adf-jmxdc-ide     oracle.adf.jmxdc     11.1.1.2.36.55.36     Loaded
    adf-logging-dt     oracle.adf.logging.dt     11.1.1.2.36.55.36     Loaded
    adf-model-debugger-dt     oracle.adf-model-debugger-dt     11.1.1.2.36.55.36     Loaded
    adf-model-tools     oracle.adf.model.tools     11.1.1.2.36.55.36     Loaded
    adf-security-policy-dt     oracle.adfdtinternal.adf-security-policy-dt     11.1.1.2.36.55.36     Loaded
    adf-share-deploy-dt     oracle.adf.share.deploy.dt     11.1.1.2.36.55.36     Loaded
    adf-share-dt     oracle.adf.share.dt     11.1.1.2.36.55.36     Loaded
    adfmcoredt-xdf     oracle.adfm.xdf     11.1.1.2.36.55.36     Loaded
    adfquerylovdt     oracle.adf-faces-query-and-lov-dt     11.1.1.2.36.55.36     Loaded
    appoverview     oracle.ide.appoverview     11.1.1.2.36.55.36     Loaded
    asnav-weblogic     oracle.jdeveloper.asnav.weblogic     11.1.1.2.36.55.36     Loaded
    audit     oracle.ide.audit     11.1.1.2.36.55.36     Loaded
    audit-core     oracle.ide.audit.core     11.1.1.2.36.55.36     Loaded
    bi-jdbc     oracle.bi.jdbc     11.1.1.2.36.55.36     Loaded
    classpath: protocol handler extension     oracle.jdeveloper.classpath     11.1.1.0.0     Loaded
    db-audit     oracle.ide.db.audit     11.1.1.2.36.55.36     Loaded
    db-modeler-transform     oracle.dbmodeler.transform     11.1.1.2.36.55.36     Loaded
    dcadapters-ide     oracle.adfm.dc-adapters     11.1.1.2.36.55.36     Loaded
    dependency-java     oracle.jdeveloper.java.dependency     11.1.1.2.36.55.36     Loaded
    dependency-refactor     oracle.jdeveloper.refactoring.dependency     11.1.1.2.36.55.36     Loaded
    deploy-ant     oracle.deploy.ant     11.1.1.2.36.55.36     Loaded
    deploy-rt     oracle.jdevimpl.deploy-rt     11.1.1.2.36.55.36     Loaded
    feedback-client2     oracle.ideimpl.feedback2.client     11.1.1.2.36.55.36     Loaded
    ide-diagnostics     oracle.ide.diagnostics     11.1.1.0.0     Loaded
    j2ee-adrsimpl     oracle.j2ee.adrsimpl     11.1.1.0.0     Loaded
    j2ee-facelets     oracle.j2ee.facelets     11.1.1.2.36.55.36     Loaded
    j2ee-jpsconfig     oracle.j2ee.jpsconfig     11.1.1.2.36.55.36     Loaded
    j2ee-security     oracle.j2ee.security     11.1.1.2.36.55.36     Loaded
    j2ee-server     oracle.j2ee.server     11.1.1.0.0     Loaded
    j2ee-server-dt     oracle.j2ee.server.dt     11.1.1.2.36.55.36     Loaded
    j2ee-serverimpl     oracle.j2ee.serverimpl     11.1.1.2.36.55.36     Loaded
    j2ee-weblogic     oracle.j2ee.weblogic     11.1.1.2.36.55.36     Loaded
    j2ee-weblogic-editors     oracle.j2ee.weblogic.editors     11.1.1.2.36.55.36     Loaded
    jdukshare     oracle.bm.jdukshare     11.1.1.2.36.55.36     Loaded
    library-dconfig-infra     oracle.jdeveloper.library.dconfig.infra     11.1.1.2.36.55.36     Loaded
    library-jee-api     oracle.jdeveloper.library.jee.api     11.1.1.2.36.55.36     Loaded
    library-jmx     oracle.jdeveloper.library.jmx     11.1.1.2.36.55.36     Loaded
    library-jps     oracle.jdeveloper.library.jps     11.1.1.2.36.55.36     Loaded
    library-weblogic-api     oracle.jdeveloper.library.weblogic.api     11.1.1.2.36.55.36     Loaded
    library-weblogic-client     oracle.jdeveloper.library.weblogic.client     11.1.1.2.36.55.36     Loaded
    mof     oracle.mof     11.1.1.2.36.55.36     Loaded
    mof-index     oracle.mof.index     11.1.1.2.36.55.36     Loaded
    mof-xmi     oracle.mof.xmi     11.1.1.2.36.55.36     Loaded
    oracle.adfm     oracle.adfm     11.1.1.2.36.55.36     Loaded
    oracle.adfm.contextual     oracle.adfm.contextual     11.1.1.2.36.55.36     Loaded
    oracle.dynamic-faces-dt     oracle.dynamic.faces     11.1.1.2.36.55.36     Loaded
    oracle.ide.dependency     oracle.ide.dependency     11.1.1.2.36.55.36     Loaded
    oracle.ide.filequery     oracle.ide.filequery     11.1.1.2.36.55.36     Loaded
    oracle.ide.indexing     oracle.ide.indexing     11.1.1.2.36.55.36     Loaded
    oracle.ide.usages-tracking     oracle.ide.usages-tracking     11.1.1.2.36.55.36     Loaded
    oracle.todo.tasks     oracle.todo.tasks     11.1.1.2.36.55.36     Loaded
    palette2     oracle.ide.palette2     11.1.1.2.36.55.36     Loaded
    placeholder-jsf-ui     oracle.placeholderjsf-ui     11.1.1.2.36.55.36     Loaded
    placeholderdc-dt     oracle.placeholderdc.dt     11.1.1.2.36.55.36     Loaded
    rcasadapter-dt     oracle.jdeveloper.asadapter.dt     11.1.1.2.36.55.36     Loaded
    rcasadapter-oc4j     oracle.jdeveloper.asadapter.oc4j     11.1.1.2.36.55.36     Loaded
    rcasadapter-rescat2     oracle.jdeveloper.asadapter.rescat2     11.1.1.2.36.55.36     Loaded
    rcasadapter-thirdparty     oracle.jdeveloper.asadapter.thirdparty     11.1.1.2.36.55.36     Loaded
    rcasadapter-weblogic     oracle.jdeveloper.asadapter.weblogic     11.1.1.2.36.55.36     Loaded
    rcasadapter-weblogic-api     oracle.jdeveloper.asadapter.weblogic.api     11.1.1.2.36.55.36     Loaded
    rescat2     oracle.jdevimpl.rescat2     11.1.1.2.36.55.36     Loaded
    resourcebundle-api-adfdeps     oracle.jdeveloper.resourcebundle.adfdeps     11.1.1.2.36.55.36     Loaded
    resourcebundle-api-xliff     oracle.resourcebundle.xliff     11.1.1.2.36.55.36     Loaded
    resourcebundle-customization     oracle.jdeveloper.resourcebundle.customization     11.1.1.2.36.55.36     Loaded
    searchbar-gallery     oracle.ide.searchbar.gallery     11.1.1.2.36.55.36     Loaded
    searchbar-help     oracle.ide.searchbar.help     11.1.1.2.36.55.36     Loaded
    searchbar-index     oracle.ide.searchbar.index     11.1.1.2.36.55.36     Loaded
    status     oracle.ide.status     11.1.1.2.36.55.36     Loaded
    xml-schema-dt     oracle.jdevimpl.xml.schema     11.1.1.2.36.55.36     Loaded
    xsl-dt     oracle.jdevimpl.xml.xsl     11.1.1.2.36.55.36     Loaded
    xsqldt-ide     oracle.xsqldt-ide     11.1.1.2.36.55.36     Loaded

    Hi
    thanks for getting back to me.
    I just went to the controls panel (under Systemsteuerung\Programme\Standardprogramme\Dateizuordnungen festlegen, sorry, German) I can see:
    Name: .swf
    Description: Shockwave Flash Object
    Application: Unknown application
    Also, double clicking a swf file prompts me with a dialog saying Windows can't openit  since it doesn't know how.

  • Better UI for Unit Tests

    I've been doing a lot of unit tests lately.  Right now I'm working on a code converter Air app and I'm constantly creating unit tests for bugs I'm finding and running them, and debugging them when they don't work.  When I debug, it's easiest to isolate the runner to run only one test.  I know I can do that by editing the source file and typing in the test name in the core.run call.  However, I can't help by think a better UI is needed for doing this form for TestDriven Development. 
    Basically, what I think would be perfect, is to have the UI, not run the tests initially.  It should provide you with a list of tests with checkboxes.  Then give you the opportunity to select which ones you want to run, and then run them.  It should also have the ability to re-run a test.  I realize that for any code changes to take affect you would need to re-run the entire app, but a lot of times, I find myself running the same test over and over and stepping through the code with the debugger in order to figure out what's going on.  Then I eventually change the code.
    Also, the new UI should persist the last set of selected tests, and maybe have a way to store previous selections.  That would make it perfect for how I use it. 
    Does anyone agree or disagree with this?  Has someone done this already?
    BTW, the reason I'm using the stand alone runner and not the one in Flash Builder 4 is because I've run into some bugs with the FlexUnit shipped with Flash Builder 4 and there doesn't seem to be a way to get the latest FlexUnit 4.1 to work properly with Flash Builder 4.  There seems to be a way to do it with Flash Builder 4.5, but I don't have that version.
    Thanks,
    Mark

    On 05/08/2012 03:56 PM, prakash jv wrote:
    > We have been looking for unit test framework for unit testing SWT
    > components in our RCP application developed in eclipse galileo 3.5.
    >
    > We found SWTBot supports the better UI testing and wanted to additional
    > details reagrding its support for maven 2.2.1.
    >
    > Does SWTBot work with projects which are mavenized with maven 2.2.1?
    >
    > Our aim of adding the unit tests for UI components is for better build
    > quality. So we would want these Unit tests to be run everytime we build
    > our assembly. As of now we use Junit4 for running our JUnits and they
    > run with maven outside eclipse.
    >
    > Does SWTBot support running the UI unit tests outside eclipse using maven?
    Hi
    in
    http://code.google.com/a/eclipselabs.org/p/emf-components/
    we run swtbot tests with maven/tycho
    hope this helps
    cheers
    Lorenzo
    Lorenzo Bettini, PhD in Computer Science, DI, Univ. Torino
    ICQ# lbetto, 16080134 (GNU/Linux User # 158233)
    HOME: http://www.lorenzobettini.it MUSIC: http://www.purplesucker.com
    http://www.myspace.com/supertrouperabba
    BLOGS: http://tronprog.blogspot.com http://longlivemusic.blogspot.com
    http://www.gnu.org/software/src-highlite
    http://www.gnu.org/software/gengetopt
    http://www.gnu.org/software/gengen http://doublecpp.sourceforge.net

  • Unit testing? help.

    OK, I have tried to rap my mind around this for a few days. Unit testing.
    I understand the whole:
    if(expected)
    System.out.println("OK");
    else System.out.println("Error");Part of my class assignment but, I am still confused. Could someone explain how unit testing works? (*No, I don't want you to do it for me or anything like that.*) I am just confused on how exactly to test for these things in Java. I understand that I need to add some kind of input then check the return value with what is expected. However, I am not sure how to implement it.
    Currently I tried something:
    public static void lastIndexOfTest(MyString ms, int pos, char expected){
              System.out.println("Testing lastIndexOf("+pos+") on MyString " + ms);
              System.out.println("Expected: " + expected);
              try{
                   int got = ms.charAt(pos);
                   System.out.println("Got: " + got);
                   if(got == expected)
                        System.out.println("OK");
                   else
                        System.out.println("Error2");
              catch(Exception e) {
                   System.out.println("Error: " + e);
              }That works in the sense that it give me no errors. But, because I don't understand how the code works exactly for everything I am not sure at all if it is even returning something thats correct.
    Here is my assignment:
    http://www.csl.mtu.edu/cs1122/www/programs/prog1/desc.html
    Are there any tutorials on how to do unit testing? I have been looking all over and can't seem to find any listed on Google.

    shawnw wrote:
    OK, I have tried to rap my mind around this for a few days. Unit testing."Unit" == "one thing". You're testing each individual part of your program that can be considered a single functional unit (not necessarily a single class).
    Although I've heard people say "unit testing" to apply to just about everything.
    That works in the sense that it give me no errors. But, because I don't understand how the code works exactly for everything I am not sure at all if it is even returning something thats correct.Well, obviously, knowing what's correct is necessary before you can test for correctness.
    Typically, you introduce specific test data to the thing being tested, and you know the correct response for that test data.
    For example if you're testing a factorial program, you know that 3! == 6.
    If you have a bit of (your own code) and you don't know what correct behavior of that code is, then you're not done. Really you shouldn't have started coding if you didn't know what you were trying to accomplish when you were done.
    In test-driven development, you write the test before you write the code. Among other things, this ensures that you know what a bit of code is supposed to accomplish before you even start, which is a good thing.
    Here is my assignment:
    http://www.csl.mtu.edu/cs1122/www/programs/prog1/desc.html
    Are there any tutorials on how to do unit testing? Didn't your professor mention it in class?
    I have been looking all over and can't seem to find any listed on Google.I find that hard to believe. If I Google "unit testing tutorial" I find a bunch. But several of those are specific to particular environments, so maybe that's what's throwing you off.
    The canonical unit testing framework for Java is JUnit. You might want to google for JUnit tutorials (I just did and found some).

  • Duplicate control label preventing creation of unit test using UTF

    Hello Everyone,
                       I was trying to create a unit test for a VI using the unit test framework (evaluation version) to try out this tool.  I have two questions regarding that.
    1. Several sub-VIs are called by this VI. I wanted to create a unit test for each of these sub-VIs so that I could test each of them separately. But UTF provided me with the option to create a unit test for the main VI alone. The main VI is huge and getting 100% code coverage is going to be a challenging task. Is there a way by which I can create unit tests for the individual sub-VIs?
    2. When I tried to create the unit test for the main VI, I got an error saying: Cannot create a test from this VI. Contains the following duplicate control labels. This is because the same indicators are being used in different cases within a case structure.
    Is there anyway to resolve this issue?
    Thanks

    If I understand what the problem is you have to controls or indicators that have the same name. To fix this you need to give them unique names. If they need to say the same thing on the user interface then you can use the caption and change the name on that so they both have the same name.
    Tim
    Johnson Controls
    Holland Michigan

  • Unit testing PL/SQL used in APEX application

    question from my customer :
    I am developing an application in Oracle Application Express and am working on unit tests for the PL/SQL stored procedures and packages that are stored in the underlying database and that are used by the APEX application. These unit tests should run within the SQL Developer Unit Test framework.
    The problem is that some of the PL/SQL code stored in the database uses functions like NV('APPLICATION_ITEM') to access items in the apex application. These do not return any values when I try to execute the PL/SQL within the unit test framework, ie through the backend. While it is good that the NV function does not error, NULL do not really work well in my scenario either (for example when the result of this functions is inserted into a NOT NULL column of a table). I can think of a few workarounds, such as creating my own NV function inside the test schema to return desirable values, but nothing seems a really satisfactory solution. I just wonder if there is any best practice recommendation from Oracle for this scenario - how can I run code that uses APEX-specific functions through the back end. I could not find anything in the APEX documentation for this but I'd be interesting to know if there is any recommendation how to best deal with this case.
    I am using SQL Developer version 4.0.0.13.80

    User[[:digit:]*
    Your PL/SQL Package APIs are poorly designed.
    You need to take Tom Kyte's quote to heart:
    "Application come and application go, but data remains forever"
    In short, you need to separate your database processing code (the stuff you need to unit test) from front-end/middle tier code.
    (repetitiveness is for effect.. not rudeness.)
    As such, The PL/SQL code that you need to 'UNIT TEST' must work without needing to run in APEX.
    The PL/SQL code that you need to 'UNIT TEST' must work without needing to run in .NET.
    The PL/SQL code that you need to 'UNIT TEST' must work without needing to run in JSP.
    The PL/SQL code that you need to 'UNIT TEST' must work without needing to run in Jive.
    The PL/SQL code that you need to 'UNIT TEST' must work without needing to run in Ruby.
    The PL/SQL code that you need to 'UNIT TEST' must work without needing to run in Perl::CGI.
    The PL/SQL code that you need to 'UNIT TEST' must work without needing to run in P9.
    The PL/SQL code that you need to 'UNIT TEST' must work without needing to run in <place latest and greatest thing here>.
    Again, I don't mean to sound rude.  I'm just trying to reinforce the idea that you need to separate database code from middle-tier/front-end stuff.
    Basically, you will need to separate all of your packages into multiple parts.
    a _CORE package (that will be unit tested) that does all the hard work
    an _APEX package for APEX infrastructure (this works with NV()/V(), etc.)
    a _NET package for .NET infrastructure when you need it
    a _JSP package for the JSP infrastructure when you need it
    a _JIVE package for the JIVE infrastructure when you need it
    a _<place latest and greatest thing here> for the <place latest and greatest thing here> when you need it.
    MK

  • Flash Builder 4.6 - How can I keep unit test classes out of the finished swc?

         I have a library of code I'm building and I'm working on unit testing but I have a major issue. When my finished swc compiles no matter what I do it includes the unit test classes as part of the intellisense if you load the swc via flash. The classes aren't really in the swc since if you just try and import them they'll come up undefined. They only appear to go into the intellisense for the swc. Does anyone know how can I keep this from happening in the finished source? Currently my folder setup is like this in flash builder.
    src\main - source documents for the library to get compiled
    src\mock - mock class area for unit testing
    src\test - unit test classes
         In the project Properties panel > the first tab of my Flex Library Build path I have selected only the src\main folder for the classes to inlude in the library. No other folder paths are selected.
    The "Flex Library Build Path" doesn't change my results with any setting.
    Thanks,

    Mel Riffe,
    Here's a Help topic about compiler options in Flash Builder: http://help.adobe.com/en_US/flashbuilder/using/WSe4e4b720da9dedb524b8220812e5611f28f-7fe7. html
    For information on using mxmlc, the application compiler, to compile SWF files from your ActionScript and MXML source files, you can see: http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7fcc.html
    Hope this helps,
    Mallika Yelandur
    Flash Builder Community Help & Learning
    Adobe Systems Incorporated

  • Unit Test component missing after upgrade to 3.2

    I recently upgraded (just installed it over the previous version) the sqldeveloper from 3.1 to 3.2.20.09.
    Since the new installation the unit test component is missing. After some searches I found that entry in the help/info/enhancements panel:
    Oracle SQL Developer - Unit Test    oracle.sqldeveloper.unit_test    11.2.0.09.87    Deaktiviert durch Benutzer (=>deactivated by user !?)
    It seems as if it was deactivated somehow. I certainly can't remember deactivating any components/enhancements, escpecially not the unit testing framework.
    How can I enable it again?

    JimSmith wrote:
    You should never install a new version over an old version. It always causes problems. The upgrade path as documented in the release notes is ALWAYS to install in a new directory.
    Hm... I just double checked the installation guide (http://docs.oracle.com/cd/E35137_01/doc.32/e35119/install.htm#CIHFGGJB) and I can't see a comment that you HAVE TO use a new directory. And even more that reusing the same directory would result in a corrupt installation.
    The only thing that it tells me is that IF I want to migrate user settings from a previous release, I need to install it in an empty folder.
    To migrate user settings from a previous SQL Developer release:
      Unzip the kit for the current release into an empty directory (folder). Do not delete or overwrite the directory into which you unzipped the kit for the previous SQL Developer release.
    If I don't want to migrate user settings, then I could install it into the same directory.
    Did I overlook something in the installation guide? Maybe there is a documentation gap?
    The comment in the release notes is easily overlooked, especially as soon as you start looking though the installation guide. And there the wording could be misleading.
    Message was edited by: SvenW.

Maybe you are looking for

  • Keyword selection function in Adobe Bridge CS3

    Hello, Does anybody know if and how I can change the "selection criteria" of keywords in Adobe Bridge CS3? -> selection criteria: If I want to use the filter with the keywords, it selects the images which include any of the selected keywords (OR-func

  • Can't open jpg attachments. Options/Applications setting doesn't work.

    jpeg attachments won't open in email. Window opens asking what to do and what pgm to use but once selected it just saves it to my download file anyway. I've updated FF Options/Applications but it made no difference. == This happened == Every time Fir

  • Open Item Clearing Differences - Tolerence Groups for specific GL Acctts

    Dear Forum, We have a situation where we need to set up different Tolerance Groups for Clearing Differences for different GL Accounts, such as for GL Account for GRIR Clearing Account, we do not want any clearing differences and therefore the toleran

  • "FTP Subcommand: local error' in DMS

    Hi Forum.. I have a problem with DMS while i'm doing Check in As 'Vault' i'm getting an error "FTP Subcommand: local error' wat r the settings tht i hav to do to overcum this error. i have already checked with reports like RSFTP002 & MCDOKVAULT. itz

  • Attribute filter in query

    in GL_Account having attribute Indicator: G/L Account (P&L) Indicator: G/L Account (Balance). and both are navigational attribute. now how to restrict values of both attribute in Query. let say Indicator: G/L Account (P&L) having values = X so in que