java - Mockito - 模拟依赖而不注入
问题描述
我整天都在看论坛试图模拟一个类,但没有一个解决方案对我有用,而且我不知道我做错了什么(我是 Java 测试的新手)。
我有我想测试的这个(重命名的)类,主要是每个 if 条件以确保它们工作:
public class MyClass {
public static List<Object> MyClass(@NotNull Session session, @NotNull MyObject updated, @NotNull Mode mode)
throws Exception {
ModeList modes = MyUtil.geModes(mode);
try {
final Transaction tr = updated.getTransaction();
MyObject original;
if(tr == null) {
original = new Foo().getCurrentBar(session, updated.getKey(), null, "en");
} else {
original = new Foo().getOtherBar(session,
updated.getKey(),
tr.getProp1().intValue(),
tr.getProp2().intValue(),
"en");
}
return SomeClass.check(updated, original, modes);
} catch (Exception ex) {
// handle
}
return null;
}
}
请注意,我无法更改此(或 Foo 类)/添加依赖注入,它需要按原样进行测试。我尝试过 mockito、powerMock mock、mockStatic、partial mocks 等,它们都因某种原因而失败,而真正的 getCurrentBar / getOtherBar 被调用。
在这一点上我可能会得到隧道视野,但请告知。
解决方案
这段代码是错误的,它应该使用工厂来获取 Foo,所以你可以模拟工厂。但既然你不能修改它,那么下一个最好的方法是使用 PowerMock。
您可以遵循本指南:https ://github.com/powermock/powermock/wiki/MockConstructor确保不要忘记 @RunWith 和 @PrepareForTest 注释。
推荐阅读
- telegram - 如何在电报中禁用链接预览
- flutter - 如何让我的 API 请求在小部件测试期间得到真正的响应?
- java - 新 Maven 项目的 pom.xml 中出现“无法初始化类...”错误
- ios - 将滑动手势从 UIView 传递到底层 UIPageViewController
- postgresql - Postgresql - 2 个数据库服务器,两者都有一个返回相同列的视图。如何组合成一张桌子
- electron - 在 electron-builder NSIS 安装程序运行后将命令行参数传递给应用程序
- css - 我正在尝试为我的 wordpress 网站上的文本框重新着色,但我的代码仅在文本区域具有焦点时才有效
- c# - Blazor 服务器 SignarlR HubConnection StartAsync 引发错误
- sql - 将行动态转置为未知列数的列
- git - Git CMD - 删除或增加输出行限制