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

Mockito注入嵌套bean

欧阳睿范
2023-03-14

我对摩基托并不陌生,但这次我在工作中发现了一个有趣的案例。我希望你能帮我解决这件事。

我需要注入mock来改变测试过程中的某些方法行为。问题是,bean结构是嵌套的,并且这个bean在其他bean内部,不能从test方法访问。我的代码如下所示:

@Component
class TestedService { 
  @Autowired
  NestedService nestedService;
}

@Component
class NestedService {
  @Autowired
  MoreNestedService moreNestedService;
}

@Component
class MoreNestedService {
  @Autowired
  NestedDao nestedDao;
}

@Component
class NestedDao {
  public int method(){
    //typical dao method, details omitted
  };
}

所以在我的测试中,我希望调用nestedDAO.method返回模拟答案。

class Test { 
  @Mock
  NestedDao nestedDao;

  @InjectMocks
  TestedService testedSevice;

  @Test
  void test() {
    Mockito.when(nestedDao.method()).thenReturn(1);
    //data preparation omitted
    testedSevice.callNestedServiceThatCallsNestedDaoMethod();
    //assertions omitted
  }
}

我尝试执行一个initmocks:

@BeforeMethod
  public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
}

还要在我的测试类上添加注释:

@RunWith(MockitoJUnitRunner.class)

总是从方法获得nullpointers或错误的答案(不是嘲弄的)。

我猜是这个嵌套的调用错误,使得无法嘲弄这个刀。我还读到过@injectmocks只能与setter或构造函数注入一起工作,我没有使用这些功能(只是在私有字段上使用@autowire),但当我尝试时它没有工作。

你猜我错过了什么吗?;)

共有1个答案

贲绪
2023-03-14

您可以使用@mockbean代替@mock和@injectionmock。

@RunWith(SpringRunner.class)
@SpringBootTest
class Test { 
  @MockBean
  NestedDao nestedDao;

  @Autowired
  TestedService testedSevice;

  @Test
  void test() {
    Mockito.when(nestedDao.method()).thenReturn(1);
    //data preparation omitted
    testedSevice.callNestedServiceThatCallsNestedDaoMethod();
    //assertions omitted
  }
}
 类似资料:
  • 我正在尝试验证是否调用了具有以下签名的方法: 嵌套的参数化 Set 给我带来了困难。我可以让它使用 any() 匹配器正确验证,如下所示: 如Mockito:使用泛型参数进行验证中所述,尽管令人恼火的是,如果我直接静态导入Matchers,它不起作用。任意,并将其称为: 但是在这种情况下,anyMapOf(clazz,clazz)似乎是更合适的匹配器。既然你不会做Set.class,我不知道你会怎

  • 问题内容: 我需要定义一个切入点,该切入点触发使用自定义注释注释的spring服务的所有方法的执行。我想定义切入点的注释将在另一个注释上。 然后该服务将被注释如下 我尝试使用以下切入点定义,但是仅当@Y在服务本身上时才有效,这意味着它看不到注释在@X上 问题答案: 我在应用程序中有这个确切的需求。我找到了这个答案,但不满意无法完成。 经过更多搜索之后,我发现了用于AspectJ / Spring切

  • 我有一个工厂是这样的: 这样的类: 如何正确使用Google Guice来做同样的事情?我尝试了辅助注射,但我不确定如何创建“UrlBuilder”。谁能帮忙?

  • 我有一个相当典型的场景,其中有一个main@实体,他内部的所有内容都是可嵌入的(因此,没有父实体,内部的所有内容都没有意义)。现在JPA 2.0阻止我在另一个@ElementCollection中定义的@Embeddeble中嵌套一个@ElementCollection: JSR-317 2.6可嵌入类和基本类型的集合包含在元素集合中的可嵌入类(包括另一个可嵌入类中的可嵌入类)不得包含元素集合,也

  • 本文向大家介绍Spring实战之注入嵌套Bean操作示例,包括了Spring实战之注入嵌套Bean操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Spring实战之注入嵌套Bean操作。分享给大家供大家参考,具体如下: 一 配置 二 接口 Axe Person 三 实现 Chinese StoneAxe SteelAxe 四 测试类 五 运行 钢斧砍柴真快 更多关于java相关内容

  • 问题内容: 我想将Mockito模拟对象注入到Spring(3+)bean中,以进行JUnit的单元测试。我的bean依赖项当前是通过在私有成员字段上使用注释来注入的。 我考虑过使用,但是我希望注入的bean实例实际上是一个代理,因此没有声明目标类的私有成员字段。我不希望为依赖项创建一个公共的setter,因为我将纯粹出于测试目的而修改接口。 我遵循了Spring社区提供的一些建议,但是未创建该模