- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
首先我想为我的英语感到抱歉。
我开始做一些单元测试(我以前从未这样做过,我是编程新手)。
我必须使用mockito.verify测试将产品添加到数据库(DynamoDB)的简单方法,但我有
"Wanted but not invoked. Actually, there were zero interactions with this mock."
错误,我不知道该怎么办。
这是我的方法代码(在 KitchenService 类中):
public Product addProduct(Product content) {
ObjectMapper objectMapper = new ObjectMapper();
String mediaJSON = null;
String authorJSON = null;
String productKindsJSON = null;
try {
mediaJSON = objectMapper.writeValueAsString(content.getMedia());
authorJSON = objectMapper.writeValueAsString(content.getAuthor());
productKindsJSON = objectMapper.writeValueAsString(content.getProductKinds());
} catch (JsonProcessingException e) {
logger.log(e.getMessage());
}
Item item = new Item()
.withPrimaryKey("id", UUID.randomUUID().toString())
.with("name", content.getName())
.with("calories", content.getCalories())
.with("fat", content.getFat())
.with("carbo", content.getCarbo())
.with("protein", content.getProtein())
.with("productKinds", productKindsJSON)
.with("author", authorJSON)
.with("media", mediaJSON)
.with("approved", content.getApproved());
Item save = databaseController.saveProduct(PRODUCT_TABLE, item);
logger.log(save + " created");
return content;
}
这是测试代码:
@Test
public void addProduct() throws Exception {
KitchenService instance = mock(KitchenService.class);
Product expectedProduct = new Product();
expectedProduct.setName("kaszanka");
expectedProduct.setCalories(1000);
expectedProduct.setFat(40.00);
expectedProduct.setCarbo(20.00);
expectedProduct.setProtein(40.00);
expectedProduct.setProductKinds(Collections.singletonList(ProductKind.MEAT));
expectedProduct.setApproved(false);
Author expectedAuthor = new Author();
expectedAuthor.setId("testID");
expectedAuthor.setName("Endrju Golota");
expectedProduct.setAuthor(expectedAuthor);
Media expectedMedia = new Media();
expectedMedia.setMediaType(MediaType.IMAGE);
expectedMedia.setName("dupajasia");
expectedMedia.setUrl("http://blabla.pl");
expectedProduct.setMedia(expectedMedia);
verify(instance, times(1)).addProduct(expectedProduct);
}
这是我测试后得到的:
Wanted but not invoked:
kitchenService.addProduct(
model.kitchen.Product@a0136253
);
-> at service.kitchen.KitchenServiceTest.addProduct(KitchenServiceTest.java:80)
Actually, there were zero interactions with this mock.
有人可以告诉我我做错了什么吗?
最佳答案
您应该模拟和验证的是 databaseController
依赖项:
@Test
public void addProduct() throws Exception {
KitchenService instance = new KitchenService(); // you should create the class under test
DatabaseController controllerMock = mock(DatabaseController.class); // mock the controller
instance.setController(controller); // inject the mock
...
// Act
instance.addProduct(expectedProduct);
// Assert
verify(controller).saveProduct(Mockito.eq(PRODUCT_TABLE), Mockito.any(Item.class));
}
您应该验证数据库是否在服务内被调用。检查是否使用任何 Item
对象调用数据库就足够了。
关于java - Mockito 验证单元测试 - 需要但未调用。事实上,与这个模拟的互动为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46450522/
我一直在使用 Indeed.com XML Feed API 为测试应用程序收集工作职位。 API 似乎因我们的服务器 IP 而被阻止并抛出以下错误。 curl: (56) Recv failure:
首先我想为我的英语感到抱歉。 我开始做一些单元测试(我以前从未这样做过,我是编程新手)。 我必须使用mockito.verify测试将产品添加到数据库(DynamoDB)的简单方法,但我有 "Want
我正在学习计算机体系结构,并遇到了一种说法:“完全可以在没有虚拟内存的情况下运行,只需物理内存(事实上,大多数嵌入式系统都以这种方式运行)”。 这是真的吗?如果是,那么我想知道如何? 谢谢。 最佳答案
我正在尝试使用函数过滤器设置规则。但它不起作用:该层上的线条只是黑色。更重要的是,我提供的用于过滤特征的函数从未被调用。 谁能指出我犯的错误是什么? 这是代码。 感谢您的时间和亲切的关心。 var m
我正在尝试使用 Hibernate 和 JPA 调试预先存在的代码。该错误消息是有道理的,甚至还有其他几个问题正在讨论。但是当我寻找一个保持打开的 session 时,我发现整个代码正文中没有提到“
我是一名优秀的程序员,十分优秀!