我正在使用JUnit
编写测试用例,我希望通过捕获exception
来使测试失败。测试中的方法会引发DataException
并捕获Throwable
。在我的测试用例中,我想要抓住DataException
,但是如果我没有失败,我的测试就会通过。
待测方法:
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
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());
}
}
我不确定这是否是完成此类事情的正确方法,但这是我到目前为止所做的。
由于
答案 0 :(得分:1)
在你测试的方法中,永远不可能抛出任何东西。将所有代码包含在带有catch (Throwable t) {}
的try块中意味着任何扩展Throwable(意味着所有可能的异常和错误)的内容都会被捕获并被吃掉。因此,如果您希望测试捕获DataException,则不会发生。会发生的是,如果在方法中抛出异常,则方法返回的列表将为null。
答案 1 :(得分:0)
如果您希望在捕获异常后测试失败,请在测试的catch块中添加fail()语句。
如果您希望测试失败,如果它没有抛出异常,请使用@Test(expected = DataException.class)注释进行该测试。