Pouvez-vous me dire comment tester la méthode d'édition, je dois faire correspondre deux produits, mais je ne peux pas le faire parce que je ne connaître primaryKey qui est généré de manière aléatoire.Comment tester une méthode quand je ne connais pas l'ID aléatoire qui est primaryKey de l'article de base de données
Ce code est la méthode:
public Product editProduct(PrimaryKey primaryKey, Product content) {
Map<String, Object> map = new HashMap<>();
map.put("name", content.getName());
map.put("calories", content.getCalories());
map.put("fat", content.getFat());
map.put("carbo", content.getCarbo());
map.put("protein", content.getProtein());
map.put("productKinds", content.getProductKinds());
map.put("author", content.getAuthor());
map.put("media", content.getMedia());
map.put("approved", content.getApproved());
UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey(primaryKey).withValueMap(map);
UpdateItemOutcome itemOutcome = databaseController.getTable(PRODUCT_TABLE).updateItem(updateItemSpec);
Product product = new Product();
product.setName(itemOutcome.getItem().get("name").toString());
product.setCalories(itemOutcome.getItem().getInt("calories"));
product.setFat(itemOutcome.getItem().getDouble("fat"));
product.setCarbo(itemOutcome.getItem().getDouble("carbo"));
product.setProtein(itemOutcome.getItem().getDouble("protein"));
product.setProductKinds(itemOutcome.getItem().getList("productKinds"));
ObjectMapper objectMapper = new ObjectMapper();
try {
Author productAuthor = objectMapper.readValue(itemOutcome.getItem().getString("author"), Author.class);
product.setAuthor(productAuthor);
} catch (IOException e) {
e.printStackTrace();
}
try {
Media productMedia = objectMapper.readValue(itemOutcome.getItem().getString("media"), Media.class);
product.setMedia(productMedia);
} catch (IOException e) {
e.printStackTrace();
}
return product;
}
Je pense que je l'ai fait bien, mais si vous voyez quelque chose de mal s'il vous plaît me dire que. Je suis Begginer et je n'ai jamais utilisé AWS auparavant.
Et voici le code de test:
@Test
public void editProduct() throws Exception {
KitchenService instance = new KitchenService(databaseControllerMock, loggerMock);
//TODO prepare expected product fields
Product expectedProduct = new Product();
Map<String, Object> map = new HashMap<>();
map.put("name", expectedProduct.getName());
map.put("calories", expectedProduct.getCalories());
map.put("fat", expectedProduct.getFat());
map.put("carbo", expectedProduct.getCarbo());
map.put("protein", expectedProduct.getProtein());
map.put("productKinds", expectedProduct.getProductKinds());
map.put("author", expectedProduct.getAuthor());
map.put("media", expectedProduct.getMedia());
map.put("approved", expectedProduct.getApproved());
//TODO prepare argument product
Product productToSave = new Product();
productToSave.setName("kaszanka");
productToSave.setCalories(1000);
productToSave.setFat(40.00);
productToSave.setCarbo(20.00);
productToSave.setProtein(40.00);
productToSave.setProductKinds(Collections.singletonList(ProductKind.MEAT));
productToSave.setApproved(false);
Author author = new Author();
author.setId("testID");
author.setName("Endrju Golota");
productToSave.setAuthor(author);
Media media = new Media();
media.setMediaType(MediaType.IMAGE);
media.setName("dupajasia");
media.setUrl("http://blabla.pl");
productToSave.setMedia(media);
UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey(primaryKey).withValueMap(map);
UpdateItemOutcome itemOutcome = databaseControllerMock.getTable("product").updateItem(updateItemSpec);
when(databaseControllerMock.update(any(Item.class))).thenReturn(itemOutcome);
Product actualProduct = instance.editProduct(productToSave);
assertEquals(expectedProduct, actualProduct);
}
J'ai beaucoup de problèmes avec les tests mais je learing encore comment faire ce droit, ne soyez pas impoli si vous voyez quelque chose de ridicule dans mon code ...
Maintenant, je vois que je ne peux pas comparer des champs ou des objets entiers parce que je ne peux pas obtenir l'élément de base de données qui est raillé .. alors comment je suppose pour tester la méthode comme ça? –
J'ai édité la réponse avec une suggestion sur comment vous devriez le tester. – BrenoQ