为什么使用 Mockito 模拟静态方法在我的情况下不起作用?

2024-01-07

我有这个复杂的方法。我只想嘲笑结果。里面的所有内容基本上都应该被忽略。我正在使用 Mockito 。

class JiraManager
{
    public static  List<Issue> searchMitarbeiterIssue(String mitarbeiterName) throws JqlParseException, SearchException {
        ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();
        JqlQueryParser jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser.class);
        SearchService searchService = ComponentAccessor.getComponent(SearchService.class);
        String jqlSearchString = "project = BLUB AND issuetype = BLOB AND text ~ \"" + myName+ "\""+" AND status = aktive";
        final Query query = jqlQueryParser.parseQuery(jqlSearchString);
        List<Issue> issues = null;
        Query queryToExecute = JqlQueryBuilder.newBuilder(query).buildQuery();
        // get results for the jql query
        SearchResults searchResult = searchService.search(user, queryToExecute, PagerFilter.getUnlimitedFilter());
        try {
            Method newGetMethod = null;
            try {
                newGetMethod = SearchResults.class.getMethod("getIssues");
            } catch (NoSuchMethodException e) {
                try {
                    LOGGER.warn("SearchResults.getIssues does not exist - trying to use getResults!");
                    newGetMethod = SearchResults.class.getMethod("getResults");
                } catch (NoSuchMethodError e2) {
                    LOGGER.error("SearchResults.getResults does not exist!");
                }
            }
            if (newGetMethod != null) {
                issues = (List<Issue>) newGetMethod.invoke(searchResult);
            } else {
                LOGGER.error("ERROR NO METHOD TO GET ISSUES !");
                throw new RuntimeException("ICT: SearchResults Service from JIRA NOT AVAILABLE (getIssue / getResults)");
            }
        } catch (NoSuchMethodException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            LOGGER.error("Jql Helper can not get search result (ICT)", e);
        } catch (Exception e) {
            LOGGER.error("Jql Helper can not get search result - other exception (ICT)", e);
        }
        return issues;
    }
}

我不希望 Mockito 运行该方法内的所有代码。它应该只返回 List 。就这样 。所以我尝试了这个:

try (MockedStatic<JiraManager> utilities = Mockito.mockStatic(JiraManager.class)) {
    utilities.when(() -> JiraManager.searchMitarbeiterIssue(any()))
            .thenReturn(Collections.singletonList(mitarbeiterIssueResult));
    assertTrue(JiraManager.searchMitarbeiterIssue("").size() == 1);
} 

但它不起作用。它总是返回 null。为什么 ??方法内的代码是否被执行? Mockito 到底在做什么?


下面对我有用。

  1. 创建MockedStatic类字段
private MockedStatic<MyUtilClassWithStaticMethods> myUtil;
  1. 在每个测试用例之前初始化 MockedStatic
@BeforeEach
void initialiseWorker() {
    myUtil = mockStatic(MyUtilClassWithStaticMethods.class);
}
  1. 每个测试用例后关闭 MockedStatic
@AfterEach
public void close() {
    myUtil.close();
}
  1. 测试用例中的模拟静态方法行为
@Test
void test() {
    when(MyUtilClassWithStaticMethods.staticMethod(any())).thenReturn(null);
}

您可以在此处返回列表而不是 null。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用 Mockito 模拟静态方法在我的情况下不起作用? 的相关文章

随机推荐

  • ODBC 不断提示输入密码

    我有一个在 Access 2003 中构建的应用程序 它使用系统 DSN ODBC 连接到 SQL Server ODBC 使用 SQL 身份验证 当应用程序启动时 系统会提示用户在数据库中进行身份验证 我在同一域中设置了另一台计算机 并安
  • 在 Hive 中获取系统日期 -1

    有什么办法可以得到current date 1在 Hive 中的意思是yesterdays date总是 并且以这种格式 20120805 我可以像这样运行查询来获取数据yesterday s date就像今天一样Aug 6th selec
  • 防止xss攻击的更好方法

    这两种方法中哪一种是更好的防止 xss 攻击的方法 保存在数据库中时的 HTMLEntities 显示 回显时的 HTMLEntities 我发现第一个更好 因为您可能会在显示时忘记添加它 两者中哪一个是更好的防止xss攻击的方法 保存在数
  • 将 Spark 数据加载到 Mongo / Memcached 中以供 Web 服务使用

    我对 Spark 非常陌生 并且有一个特定的工作流程相关问题 虽然它并不是真正与编码相关的问题 但它更像是与 Spark 功能相关的问题 我认为它在这里是合适的 如果您认为这个问题不适合 请随时将我重定向到正确的网站 所以这里是 1 我计划
  • 在没有管理员权限的情况下安装 MSBuild 15(Microsoft 构建工具)?

    有没有办法在没有管理员权限的情况下在我的计算机上本地安装 MSBuild 15 微软安装程序开启https www visualstudio com downloads https www visualstudio com download
  • 我怎样才能获得正确的付款期限?

    我觉得这更像是数学问题 我公司的员工遍布全国各地 公司的某些部门采用 奇数 工资周期 而另一些部门则采用 偶数 工资周期 我将给定支付期的开始日期称为 支付期 我需要做两件事 1 确定给定日期所属的发薪期 Something like th
  • 了解简单 C 程序生成的汇编代码

    我试图通过使用 gdb 的反汇编程序检查简单 C 程序的汇编级代码 以下是C代码 include
  • 如何为 Dagger2 提供 GoogleApiClient 依赖项?

    我已经开始使用 Dagger2 来管理依赖项 并且我试图了解如何使用 DI 来提供单例 GoogleApiClient 这样做的动机是 减少样板代码 多个 Activity 和 Fragments 需要 GoogleApiClient 提高
  • Vuejs - 无法读取未定义的属性“_withTask”

    我试图在按下按钮后将新的 html 添加到我的 div 中 使用v for 但是在我按下按钮后 我收到此错误 并且元素 文章 被添加到 div 一次 但之后它就不再起作用了 vue js 3de6 1743 TypeError 无法读取未定
  • Visual Studio 2015 RC - 无法添加虚拟目录

    我最近升级了我的机器 这意味着我必须安装 VS 2015 RC 社区 打开以前的项目 必须重新创建以前的所有虚拟目录 才发现当我尝试时收到以下错误消息 操作无法完成 只需选择 添加虚拟目录 时 输入名称和路径 然后按 Enter 键 还有其
  • Tensorflow Dataset API 在完成一个 epoch 后恢复迭代器

    我有 190 个特征和标签 我的批量大小是 20 但经过 9 次迭代tf reshape正在返回异常reshape 的输入是一个有 21 个值的张量 但请求的形状有 60 个我知道这是因为Iterator get next 如何恢复我的迭代
  • 如何使用 pandas 将列中的每个 NaN 替换为不同的随机值?

    我最近一直在玩 pandas 现在我尝试用不同的正态分布随机值替换数据框中的 NaN 值 假设我有这个没有标题的 CSV 文件 0 0 343 1 483 2 101 3 NaN 4 NaN 5 NaN 我的预期结果应该是这样的 0 0 3
  • 文本在*内*边界框内对齐

    文本框的对齐方式可以通过horizontalalignment ha and verticalalignment va 参数 例如 import matplotlib pyplot as plt fig ax plt subplots fi
  • GitLab Pipeline 无法连接到 Kubernetes

    当我执行视频显示的管道作业时 它失败并给出一条消息 错误 准备失败 连接到 Kubernetes 时出错 配置无效 未提供配置 这是故意的吗 我错过了任何配置吗 kubernetes 是为我的跑步者和我正在处理的项目配置的 但我没有看到任何
  • 使用只有很棒的字体的标记图标,没有周围的气球

    我的代码运行良好 但我只需要显示要显示的图标 而不是带有阴影的 气球 我尝试过删除 markerColor 但这只是更改为默认的蓝色标记 气球 如何只显示图标及其大小和颜色 pointToLayer function feature lat
  • 如何在iOS中使用Openssl工具解密使用AES128加密的数据

    我有很多代码片段 它们使用 AES128 加密数据 如果您提供工作实现 我将非常感激 例如这个 NSData AES128EncryptWithKey NSString key key should be 16 bytes for AES1
  • RxJS 替代 Promise.resolve?

    RxJS 中相当于什么Promise resolve 我知道我能做到Observable fromPromise Promise resolve someValue 但必须有一种更清洁的方法 可观察的 of https github com
  • 在重新启动内执行 MonadIO 操作

    在反应式香蕉中 我正在尝试运行reactimate Event IO gt Moment 通过一些行动Arduino in hArduino封装 https hackage haskell org package hArduino 0 9
  • TrackMouseEvent 不起作用

    基本上 我打电话TrackMouseEvent in my WM CREATE然后我也再次调用它之后WM MOUSELEAVE事件 但这会冻结我的程序 我应该把它粘在哪里 你需要打电话TrackMouseEvent当鼠标进入您的控件时 而不
  • 为什么使用 Mockito 模拟静态方法在我的情况下不起作用?

    我有这个复杂的方法 我只想嘲笑结果 里面的所有内容基本上都应该被忽略 我正在使用 Mockito class JiraManager public static List