我有一个helper类,它包含一个公共静态方法getProductHandler(字符串名)
:
public class ProductHandlerManager {
public static Handler getProductHandler(String name) {
Handler handler = findProductHandler(name);
return handler;
}
}
一个定制服务类使用上面的ProductHandlerManager:
public class CustomerService {
...
public void handleProduct() {
Handler appleHandler = ProductHandlerManager.getProductHandler("apple");
appleHandler.post(new Runnable() {
@Override
public void run() {
//...
}
});
}
}
我想在自定义服务类中使用单元测试handleProducts()
方法。我尝试使用mockito模拟测试中的ProductManager.getProductHandler(苹果)
部分,但是mockito不支持静态方法模拟。那么我如何使用mockito来单元测试handleProducts()
函数呢?
请不要建议我使用Powermock,因为我读过一些文章,说如果我需要模拟静态方法,这表明设计不好。但是我可以接受关于代码重构的建议,使其可测试。
您可以自己重构并指定处理程序。如果您将测试与被测试的类放在同一个包中,即使它们位于不同的源文件夹中(例如src vs testsrc),这些测试通常是包私有的。Guava(Google Commons)也有一个方便的@VisibleForTesting文档注释,尽管Javadoc也可以使用。
public class CustomerService {
public void handleProduct() {
handle(ProductHandlerManager.getProductHandler("apple"));
}
/** Visible for testing. */
void handleProduct(Handler handler) {
handler.post(new Runnable() {
@Override
public void run() {
//...
}
});
}
}
此时,您可以作为单元测试密集地测试handleProducts(Handler)
,然后只测试handleProducts()
作为联调,以确保"apple"产品处理程序正确交互。
我有一个这样的方法。 > 如果我模拟记录器,是否必须将方法更改为post(字符串json,记录器记录器)?否则,如何使此模拟与该方法交互?
我陷入了单元测试场景的一个基本问题,并将感谢帮助。 我有一个类,它调用在DB中将标志设置为true。 我的测试: 我被要求测试并检查是否正在使用相关数据调用。 由于返回类型无效,我如何测试它?
我正在为我的应用程序创建一个Spring BootAPI。我试图使用mockito对我的服务实现进行单元测试,以模拟出细节。该服务将向数据库添加一个新的构建实体。下面是服务实现和测试实现。楼宇服务: BuildingServiceImpl_UT
我有DaoImpl类: 我的测试是: 测试是成功的,但是当我运行具有覆盖率的junit测试时,它显示方法没有被覆盖,因此我的整体单元测试行覆盖率低于要求。我们能涵盖那部分吗?如果是,我们怎么做?谢了。
令人沮丧的。我到处都能看到测试异步Vertx代码的示例,但没有任何内容接近我要测试的内容。 Vertx 3.3.2,JUnit 4.12,Java8 被测试的方法向事件总线发送消息。我想验证在eventBus()中发生的事情。发送()响应处理程序正在发生。 所以,我看到的许多例子在TEST ITSELF中有eventBus()。发送()方法(因此,测试事件总线的另一端——消费者)我想测试。发送()