我正在嘗試模擬以下行:
for (S3ObjectSummary objectSummary : S3Objects.withPrefix(s3, s3URI.getBucket(), s3URI.getKey())) {
// some code
}
如何模擬 S3Objects.withPrefix?根據 AWS 檔案,此函式的回傳型別是靜態 S3Objects(基本上是對存盤桶的迭代)。
我目前嘗試使用以下代碼模擬它:
@RunWith(PowerMockRunner.class)
@PrepareForTest({S3Objects.class})
public class TestMyMethod extends TestBase {
public void setup() {
// setup other stuff and mock them
PowerMockito.mockStatic(S3Objects.class);
Mockito.when(S3Objects.withPrefix(any(), any(), any())).thenReturn(any(S3Objects.class));
//continue setting up other stuff
}
uj5u.com熱心網友回復:
.thenReturn(any(S3Objects.class)) /* bad */
在 Mockito 語法中,包括在 PowerMockito 中,您不能使用anyinthenVerb或. 只能在or呼叫期間代替引數,并且具有特定于 Mockito 引數匹配器的其他特殊規則。Mockito 需要準確地知道您打算將哪個物件作為.doVerbthenReturnanywhenverifythenReturn
您需要創建一個mock(S3Objects.class)模擬并確保它在呼叫Iterator<S3ObjectSummary>其iterator()方法時回傳一個有效值。我會通過List<S3ObjectSummary>在您的測驗中創建一個然后將它委托iterator給它來做到這一點(未經測驗的代碼,但希望它有效):
PowerMockito.mockStatic(S3Objects.class);
S3Objects mockS3Objects = mock(S3Objects.class);
List<S3ObjectSummary> objectsToReturn = new ArrayList<>();
objectsToReturn.add(/* ... */);
when(mockS3Objects.iterator())
.thenAnswer((invocation) -> objectsToReturn.iterator());
when(S3Objects.withPrefix(any(), any(), any())).thenReturn(mockS3Objects);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/472776.html
標籤:爪哇 亚马逊网络服务 亚马逊-s3 模仿者 powermockito
上一篇:AWSs3通過url快取影像
