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.
3 Réponses :
Mais même cette ligne devra être moquée. Ma question porte sur la nécessité de se moquer de certaines dépendances.
Mockito.when(mockTable.putItem(Mockito.any(PutItemSpec.class)). thenCallRealMethod();
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(); } }
Essayez avec Map resourceResult = new HashMap (); PowerMockito.whenNew (PutItemSpec.class) .withItem (resourceRes ult) .thenReturn (vPut ItemSpec);