2017-06-23 42 views
2

我寫一個單元測試的一類,如下所示:爲什麼我無法將對象轉換爲Java中的集合?

@Test 
void testCreateStackResources() 
{ 
    List<StackResource> stackResourceListExpected = new ArrayList<>(); 
    StackResource stackResource = new StackResource(); 
    stackResource.setLogicalResourceId("Sample-Logical-ID"); 
    stackResourceListExpected.add(stackResource); 
    ListStackResourcesResult listStackResourcesResult = new ListStackResourcesResult(); 
    StackResourceSummary stackResourceSummary = new StackResourceSummary(); 
    stackResourceSummary.setLogicalResourceId("Sample-Logical-ID"); 
    listStackResourcesResult.setStackResourceSummaries((Collection<StackResourceSummary>) stackResourceSummary); // Problem in this line 
    Mockito.when(amazonCloudFormation.listStackResources(Mockito.any(ListStackResourcesRequest.class))).thenReturn(listStackResourcesResult); 
    List<StackResource> stackResourceListResult = cloudFormationManager.createStackResources(Mockito.anyString()); 
    Assert.assertEquals(stackResourceListExpected, stackResourceListResult); 
} 

現在,當我運行此代碼,它給了我,我不能投StackResourceSummary在Java集合的錯誤。

java.lang.ClassCastException: com.amazonaws.services.cloudformation.model.StackResourceSummary cannot be cast to java.util.Collection 

在另一方面,如果我之前做一個數組列表中,StackResourceSummary對象添加到列表中,然後運行UT,它給我的

objc[3648]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin/java (0x10d19c4c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10ea194e0). One of the two will be used. Which one is undefined. 

這是非常怪異的行爲。我不知道爲什麼我不能將它投射到一個集合中?請幫忙。謝謝!

PS:有一個叫ListStackResourcesResult獨立的類,它有一個setter如下:

public void setStackResourceSummaries(java.util.Collection<StackResourceSummary> stackResourceSummaries) { 
    if (stackResourceSummaries == null) { 
     this.stackResourceSummaries = null; 
     return; 
    } 

    this.stackResourceSummaries = new com.amazonaws.internal.SdkInternalList<StackResourceSummary>(stackResourceSummaries); 
} 

,我試圖用上面這個方法。

+2

因爲'StackResourceSummary'沒有實現'Collection'接口。 –

+0

看看我的更新。我正在嘗試使用'setStackResourceSummaries'。我該如何調用這種方法? – sarah

+0

爲什麼你想投到一個'收藏'? – Andrew

回答

1

這是因爲StackResourceSummary沒有擴展或實現任何與集合相關的東西。

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/cloudformation/model/StackResourceSummary.html

你需要的僅僅是創建一個收集和你StackResourceSummary的實例添加到它什麼。例如像這樣:

List<StackResourceSummary> stackResourceSummaries = new ArrayList<StackResourceSummary>(); 
stackResourceSummaries.add(stackResourceSummary) 

也許像這樣

Arrays.asList(stackResourceSummary) 

或使用第三方的lib像番石榴集合。

然後你應該使用該集合作爲參數。

listStackResourcesResult.setStackResourceSummaries(stackResourceSummaries); // Problem gone in this line 
+0

我也事先做過你的建議。這是先列出一個列表,然後向其添加'stackResourceSummary'。但那不行。當我運行測試時,它給了我上述帖子中描述的第二個錯誤。 – sarah

+0

該錯誤消息是完全不同的問題/問題。請參閱https://stackoverflow.com/questions/18794573/objc10012-class-javalaunchhelper-is-implemented-in-both-libinstrument-dyl –

+0

第二個錯誤與您的代碼無關。你是否直接從cli運行測試(例如mvn測試)或ide。 InteliJ似乎有一些問題https://stackoverflow.com/questions/42962987/after-upgrade-to-intellij-2017-1-class-javalaunchhelper-error – ipper

相關問題