2016-09-19 8 views
-2

私は、セッターの束を除いてビジネスロジックを持たないメソッドのためのJUnitテストケースを書いています。私はCoberturaを使ってより良いコードカバレッジを得るためにテストしています。JUnitのClassCastException

私はClassCastExceptionを取得していますが、これを解決する方法がわかりません。私はなぜこれが起こるのか知っていますが、この特定のケースではJUnitコードでどのように処理できるかわかりません。

これは例外をスローする行です。 dto.setValue(((String[])httpParams.get(ClientUserVendorParamConstants.DOCUSIGN_ACCOUNT_ID))[0]);

MUT

public IClientUserDto mapFieldsToTO(IClientUserDto clientUser, Map<String, Object> httpParams) { 
ESignatureClientDetails details = SecurityUtils.getSecurityObject(); 

//Map Parameters 
List<IClientUserVendorParamDto> params = new ArrayList<IClientUserVendorParamDto>(); 
IClientUserVendorParamDto dto = new ClientUserVendorParamDto(); 

dto.setName(ClientUserVendorParamConstants.DOCUSIGN_ACCOUNT_ID); 
dto.setValue(((String[])httpParams.get(ClientUserVendorParamConstants.DOCUSIGN_ACCOUNT_ID))[0]); 
dto.setCreatedBy(details.getUserIdentifier()); 
dto.setLastModifiedBy(details.getUserIdentifier()); 
params.add(dto); 

dto = new ClientUserVendorParamDto(); 
dto.setName(ClientUserVendorParamConstants.DOCUSIGN_USER_NAME); 
dto.setValue(((String[])httpParams.get(ClientUserVendorParamConstants.DOCUSIGN_USER_NAME))[0]); 
dto.setCreatedBy(details.getUserIdentifier()); 
dto.setLastModifiedBy(details.getUserIdentifier()); 
params.add(dto); 

dto = new ClientUserVendorParamDto(); 
dto.setName(ClientUserVendorParamConstants.DOCUSIGN_PASSWORD); 
dto.setValue(((String[])httpParams.get(ClientUserVendorParamConstants.DOCUSIGN_PASSWORD))[0]); 
dto.setCreatedBy(details.getUserIdentifier()); 
dto.setLastModifiedBy(details.getUserIdentifier()); 
params.add(dto); 

clientUser.getClientUserVendor().setCreatedBy(details.getUserIdentifier()); 
clientUser.getClientUserVendor().setLastModifiedBy(details.getUserIdentifier()); 
clientUser.getClientUserVendor().setClientUserVendorParams(params); 
return clientUser; 
} 

JUnitの

@Test 
public void testMapFieldsToTO() throws Exception { 
    DocusignVendorDisplay dvd = new DocusignVendorDisplay(); 
    IClientUserDto iClientUserDto = Mockito.mock(IClientUserDto.class); 
    ESignatureClientDetails clientDetails = Mockito.mock(ESignatureClientDetails.class); 

    PowerMockito.mockStatic(SecurityUtils.class); 
    PowerMockito.when(SecurityUtils.getSecurityObject()).thenReturn(clientDetails); 

    Map<String, Object> httpParams = new HashMap<>(); 
    httpParams.put("AccountId", iClientUserDto); 

    iClientUserDto = dvd.mapFieldsToTO(iClientUserDto, httpParams); 

} 
+0

例外が発生した理由を知っている場合は、おそらくあなたは私たちに自分のためにそれを考え出すの手間を惜しまだろうか?つまり、パズルは素晴らしく、すべてですが、スタックエクスチェンジには別のサイトがあります。 –

+0

私は開発者が質問を理解していない理由を理解していません。 ClassCastの背後にある理由は分かっていますが、ソリューションコードを賢明に理解することはできません。私はこれを試みましたが、これはIndexOutofBounceをスローします。 \t Mockito.when(httpParams.get(Mockito.any(String.class)))then return(new String [] {}); – Jaykumar

答えて

0

私は ClientUserVendorParamConstants.DOCUSIGN_ACCOUNT_ID"AccountId"であると仮定しています、

、あなたが"AccountId"ため Mockito.mock(IClientUserDto.class);を設定している、

ただし、StringArrayとして取得する((String[])httpParams.get(ClientUserVendorParamConstants.DOCUSIGN_ACCOUNT_ID))

十分な情報を提供していないため、わかりやすく混乱しています。たとえば、dto(IClientUserVendorParamDto)が何であるかわからないし、dto.setValueが設定されているとします。 IClientUserDtoまたはStringを設定するとしますか?

しかし、私の答えのためとして、なぜあなたはこの

String[] accountIdArray = httpParams.get(ClientUserVendorParamConstants.DOCUSIGN_ACCOUNT_ID)); 
String accountId = accountIdArray[0]: 
dto.setValue(accountId); 

のように、このライン

dto.setValue(((String[])httpParams.get(ClientUserVendorParamConstants.DOCUSIGN_ACCOUNT_ID))[0]);

を分離しようとすると、ClassCastExceptionが発生した行が表示されません。

0

私はそれを理解しました。皆様のご返信ありがとうございます。 Stringを文字列の配列にキャストしなければならなかったのです。

修正されたコード:

@Test 
public void testMapFieldsToTO() throws Exception { 
    DocusignVendorDisplay dvd = new DocusignVendorDisplay(); 
    IClientUserDto iClientUserDto = Mockito.mock(IClientUserDto.class); 
    ESignatureClientDetails clientDetails = Mockito.mock(ESignatureClientDetails.class); 

    String[] accountId = new String[]{"AccountId"}; 

    PowerMockito.mockStatic(SecurityUtils.class); 
    PowerMockito.when(SecurityUtils.getSecurityObject()).thenReturn(clientDetails); 

    Map<String, Object> httpParams = Mockito.mock(Map.class); 

    Mockito.when(((String[])httpParams.get(Mockito.any(String.class)))).thenReturn(accountId); 

    iClientUserDto = dvd.mapFieldsToTO(iClientUserDto, httpParams); 

}