当前位置: 首页 > 知识库问答 >
问题:

使用mockito的@injectmocks绕过setter注入

太叔富
2023-03-14
public abstract class AbstractClass {
    private Map<String, Object> mapToMock;
    private Map<String, Object> dontMockMe;

    private void setDontMockMe(Map<String, Object> map) {
        dontMockMe = map;
    }
}

当使用@InjectMocks时,它会自动尝试按照以下顺序进行注入:构造器、设置器、字段。它通过检查类型来检查是否可以在这些地方中注入,然后在有多种类型的可能性时命名。这对我来说不太好用,因为我的模拟映射锁实际上是通过它的setter注入到dontMockMe中的。我无法编辑此抽象类。有什么办法让我绕过塞特注射吗?提前谢谢!

共有1个答案

方寒
2023-03-14

嗯,这是一个角落的情况,自动注射不会工作的方式莫基托注射目前的设计。同时,当存在多个具有相同类型的字段时,Mockito也存在一些缺点。

因此,为了理解为什么这不起作用,让我们深入了解一下Mockito执行注入的方式:

>

  • 它将尝试通过构造函数注入来注入依赖项,如果成功,它将不会尝试以下步骤,以保护新创建的实例免受最终的副作用。

    >

  • 如果只有A类型的mock和只有一个A类型的setter,则将发生setter注入。

    如果有多个模拟或a类型的设置器,它将尝试使用模拟的类型和名称(通常是@mock字段名)来查找匹配。如果找到匹配,则将发生注入。

    然后,如果仍有一些模拟可供注入,则可能会发生场注入,使用与setter相同的算法:

    如果有多个模拟或a类型的字段,它将尝试使用模拟的类型和名称(通常是@mock字段名)查找匹配。如果找到匹配,则将发生注入。

    目前,您的代码停留在2.1阶段,因为可能只有一个mock可用。

    也就是说,目前Mockito的实现没有真正优雅的解决方案,因此有必要为自己编写注入代码。而这实际上是模仿注射的需要点,如果注射太复杂或怪异,那么你将不得不把它写出来;编写这种样板代码实际上是质疑当前设计的最佳工具。

    Mockito注射是真正的设计简单,直接的设计。

    在我看来,我发现不对:

      null

  •  类似资料:
    • 问题内容: 即使在使用函数时,也有可能注入SQL吗? 考虑此示例情况。SQL是用PHP构造的,如下所示: 我听到很多人对我说,这样的代码仍然很危险,即使使用了函数也可能被黑。但是我想不出任何可能的利用方式? 像这样的经典注射: 不工作。 您是否知道上面的PHP代码会进行任何可能的注入? 问题答案: 考虑以下查询: 不会保护您免受此侵害。 在查询中的变量周围 使用单引号()的事实可以防止这种情况的发

    • 本文向大家介绍mockito 使用Mockito批注,包括了mockito 使用Mockito批注的使用技巧和注意事项,需要的朋友参考一下 示例 我们要测试的类是: 它的合作者是: 在我们的测试中,我们想打破依赖关系Collaborator及其错误,因此我们将模拟Collaborator。使用@Mock注释是为每个测试创建不同的模拟实例的便捷方法: Mockito将尝试按以下顺序解决依赖项注入:

    • Mockito lib允许用@injectmock注入对象吗?我见过@Spy注释的例子,但当我试图使用它时,总是得到NullPointerException。我知道我总是可以直接使用reflect,但想法是避免这样的代码。

    • 问题内容: 即使使用函数,是否存在SQL注入的可能性? 考虑这种示例情况。SQL是用PHP构造的,如下所示: 我听到很多人对我说,这样的代码仍然很危险,即使使用了函数也可能被黑。但是我想不出任何可能的利用方式? 像这样的经典注射: 不工作。 您是否知道上面的PHP代码会进行任何可能的注入? 问题答案: 考虑以下查询: 不会保护您免受此侵害。 您可以在查询中的变量周围使用单引号()来防止这种情况。以

    • 本文向大家介绍SQL注入绕过的技巧总结,包括了SQL注入绕过的技巧总结的使用技巧和注意事项,需要的朋友参考一下 前言 sql注入在很早很早以前是很常见的一个漏洞。后来随着安全水平的提高,sql注入已经很少能够看到了。但是就在今天,还有很多网站带着sql注入漏洞在运行。稍微有点安全意识的朋友就应该懂得要做一下sql注入过滤。 SQL注入的绕过技巧有很多,具体的绕过技巧需要看具体的环境,而且很多的绕过