3
votes

L'élément de mise DynamoDB n'est pas moqué en utilisant MockiTo et PowerMock

Voici le code que j'essaye de simuler,

java.lang.IllegalArgumentException: null
    at com.amazonaws.services.dynamodbv2.document.PutItemOutcome.<init>(PutItemOutcome.java:33) ~[aws-java-sdk-dynamodb-1.11.400.jar:?]
    at com.amazonaws.services.dynamodbv2.document.internal.PutItemImpl.doPutItem(PutItemImpl.java:86) ~[aws-java-sdk-dynamodb-1.11.400.jar:?]
    at com.amazonaws.services.dynamodbv2.document.internal.PutItemImpl.putItem(PutItemImpl.java:63) ~[aws-java-sdk-dynamodb-1.11.400.jar:?]
    at com.amazonaws.services.dynamodbv2.document.Table.putItem(Table.java:168) ~[aws-java-sdk-dynamodb-1.11.400.jar:?]

Ce que j'ai essayé est ci-dessous,

mockStatic(AmazonDynamoDBClientBuilder.class);
    when(AmazonDynamoDBClientBuilder.defaultClient()).thenReturn(Mockito.mock(AmazonDynamoDB.class));
    PowerMockito.mockStatic(PropertyUtil.class);
    when(PropertyUtil.get(Constants.Some__ID_MAPPING_TABLE_NAME)).thenReturn("SOME_TABLE_NAME");
    Table vTable = mock(Table.class);
    PutItemSpec vPutItemSpec = mock(PutItemSpec.class);
    PutItemResult vPutItemResult = new PutItemResult();
    PowerMockito.whenNew(PutItemSpec.class).withAnyArguments().thenReturn(vPutItemSpec);
    PowerMockito.when(vTable.putItem(vPutItemSpec)).thenReturn(vPutItemOutcome);

Et l'erreur que je reçois à cause de cela est ci-dessous,

this.dynamoDb.getTable(PropertyUtil.get(Constants.SOME_TABLE_NAME))
        .putItem(
                new PutItemSpec()
                        .withItem(new Item().withString("ID", pId).withString("eId", pEId)
                                .withString("activeInd", pActiveInd)));

S'il vous plaît suggérez, ce que je dois corriger, je suis nouveau sur Mock et JUnit. Merci d'avance.


1 commentaires

Essayez avec Map resourceResult = new HashMap (); PowerMockito.whenNew (PutItemSpec.class) .withItem (resourceRes‌ ult) .thenReturn (vPut‌ ItemSpec);


3 Réponses :



0
votes
Mockito.when(mockTable.putItem(Mockito.any(PutItemSpec.class)). thenCallRealMethod();

0 commentaires

0
votes

En utilisant: - Mockito - Junit

Dans mon cas, je dois déclarer dans mon Junit un paramètre de type Table (import com.amazonaws.services.dynamodbv2. document.Table) avec une notation @Mock

Puis dans mon @Test Je dois utiliser Mockito.when () avec un faux retour, voici mon exemple de code:

public class ClassName {

  @Mock private Table tableMock;

  @Test
  public void shouldMockTableInfoForDynamoBDTable() {

    Mockito.when(tableMock.getItem((GetItemSpec) any()))
        .thenReturn(
            Item.fromJSON(
                "json: example"));
    subject.myMethodUnderTest();
  }
}


0 commentaires