2016-04-06 5 views
0

Ich schreibe einen Testfall mit JUnit und ich möchte meinen Test durch Abfangen eines exception. Die zu testende Methode löst DataException aus und fängt Throwable. In meinem Testfall möchte ich DataException fangen, aber mein Test besteht, wenn ich es nicht versage.Fehler beim Test

Methode im Test:

public List<DataSet> retrieveData(String action, Map<String, Object> params, ServiceContext ctx) throws DataException { 
    List<DataSet> o = null; 
    try { 
     if(FIND_BY_AGENCY_CODE.equals(action)) { 
      o = findByAgencyCode(params); 
     } else if(GET_CHILD_AGENCY_CODE.equals(action)) { 
      o = getChildAgencies(params); 
     } else if(GET_VALID_VALUES.equals(action)) { 
      o = loadValidValues(params); 
     } else if(GET_VALID_VALUE_COMBO.equals(action)) { 
      o = getValidValueCombo(params); 
     } else if(GET_CLAIM_UNITS.equals(action)) { 
      o = getClaimUnits(params); 
     } else if(GET_SP_LIMIT.equals(action)) { 
      o = getSPLimit(params); 
     } else if(GET_SP_PIP_APIP_TYPE.equals(action)) { 
      o = getSPPipApipType(params); 
     } else if(GET_SP_DEDUCTIBLE.equals(action)) { 
      o = getSPDeductible(params); 
     } else if(GET_SP_COVERAGE.equals(action)) { 
      o = getSPCoverage(params); 
     } else if(GET_SP_FORM_DISPLAY.equals(action)) { 
      o = getSPFormDisplay(params); 
     } else if(GET_CLAIM_UNIT.equals(action)) { 
      o = getClaimUnit(params); 
     } else if(GET_SP_STATE_COMPANY.equals(action)) { 
      o = getSPStateCompany(params); 
     } else if(GET_SP_COV_LIMIT_LOOKUP.equals(action)) { 
      o = getSPCovLimitLookup(params); 
     } else if(GET_SP_UND_LOOKUP.equals(action)) { 
      o = getSPUnderwriterLookup(params); 
     } else if(GET_SP_UND_BRANCH.equals(action)) { 
      o = getSPUndBranch(params); 
     } 
    } catch(Throwable t) { 
    } 
    return o; 
} 

JUnit Test:

@Test 
public void testRetrieveData() { 
    try { 
     AppContext.setApplicationContext(applicationContext); 

     IRetrievable dao = (IRetrievable)AppContext.getBean("nextGenDao"); 

     ServiceContext ctx = new ServiceContext(); 

     Map<String, Object> params = new HashMap<String, Object>(); 
     params.put(ServiceConstants.AGENCY_CODE, "1234"); 

     @SuppressWarnings("unused") 
     List<DataSet> ds = dao.retrieveData(NextGenDao.FIND_BY_AGENCY_CODE, params , ctx); 
     fail(); 
    } catch (DataException t) { 
     assertNotNull(t); 
     assertEquals("Unit Test", t.getMessage()); 
    } 
} 

Ich bin nicht ganz sicher, ob dies der richtige Ansatz ist, so etwas zu tun, aber das ist, was ich so weit gekommen .

Dank

+0

und Ihre Fragen ist was genau? – redFIVE

+0

Sie werfen niemals die Ausnahme von Ihrer Methode. Sie fangen es einfach und tun nichts. –

+1

Die zu testende Methode löst keine Ausnahme aus. Warum denkst du, dass dein Test bestanden werden sollte (wenn du das denkst - es ist ein bisschen verwirrend)? –

Antwort

1

In Ihrer Methode im Test, gibt es keine Möglichkeit, es etwas zu werfen, nie. Wenn der ganze Code von einem try-Block mit catch (Throwable t) {} umgeben ist, bedeutet das, dass alles, was Throwable ausdehnt (was alle möglichen Ausnahmen und Fehler bedeutet), gefangen und gegessen wird. Wenn Sie also erwarten, dass der Test eine DataException abfängt, wird dies nicht passieren. Wenn eine Ausnahme in der Methode ausgelöst wird, ist die von der Methode zurückgegebene Liste null.

+0

Wenn add neue DataException (t) im catch-Block hinzufügen. Wäre es möglich, die DataException dann zu fangen? –

+0

@Yousuf: Sicher, denn in diesem Fall würde deine Methode tatsächlich etwas werfen. –

0

Wenn der Test nach dem Abfangen einer Ausnahme fehlschlagen soll, setzen Sie eine fail() -Anweisung in den catch-Block Ihres Tests.

Wenn der Test fehlschlagen soll, wenn keine Ausnahme ausgelöst wird, verwenden Sie die Annotation @Test (expected = DataException.class) für diesen Test.

Verwandte Themen