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

方法中的模拟bean,这些bean也自动连接到同一个类或超类中

孟鹏海
2023-03-14
@RunWith(SpringRunner.class)
@WebAppConfiguration
Class Test{

@Autowired
public SomeBean someBean;

@Test
public void testAccountPage2() throws Exception {
 SomeBean someBean = mock(SomeBean.class);  
 given(someBean.getAccount(anyString())).willReturn(getCustomer());
}

这里是someBean。getAccount(anyString())不是mocking,而是调用该bean impl的实际方法。似乎是自动连线的对象,而不是模拟的对象。

有人能帮我在方法层面上模仿豆子吗?那些豆子也是在同一个类或超类中自动生成的。

谢谢

共有2个答案

楚天宇
2023-03-14

您需要注入模拟,以使其工作,而不是自动布线

//if you are just testing bean/services normally you do not need the whole application context
@RunWith(MockitoJUnitRunner.class)
public class UnitTestExample {

    @InjectMocks
    private SomeBean someBean = new SomeBean();

    @Test
    public void sampleTest() throws Exception {
        //GIVEN

        given(
            someBean.getAccount(
            //you should add the proper expected parameter
                any()
            )).willReturn(
            //you should add the proper answer, let's assume it is an Account class
            new Customer()
        );

        //DO
        //TODO invoke the service/method that use the getAccount of SomeBean
        Account result = someBean.getAccount("");

        //VERIFY
        assertThat(result).isNotNull();
        //...add your meaningful checks
    }
}
佟阳云
2023-03-14

要使用Mockito mock替换Spring容器中的bean,请使用@MockBean

import org.springframework.boot.test.mock.mockito.MockBean; // import to add

@RunWith(SpringRunner.class)
@WebAppConfiguration
Class Test{

  @MockBean
  public SomeBean someBean;

  @Test
  public void testAccountPage2() throws Exception {      
    given(someBean.getAccount(anyString())).willReturn(getCustomer());
  }
}

要理解Spring Boot中的MockitoMockBean之间的区别,可以参考这个问题。

 类似资料:
  • 我有一个,有两个Test和,使用原始bean,而使用mockedBean:所以总是有一个测试失败。有没有办法只模拟我的bean为

  • 我有两个类CustomerDAOImpl和UserDAOImpl,都用@Repository注释进行了注释。我在每个类中定义了@bean并自动连接。 与此完全相同,我在UserDAOImpl类方法中定义、自动连接和使用了以下bean(这里只显示bean定义和自动连接代码,以保持简洁): 现在这两个DAO bean都在我的服务类OrderServiceImpl(用@service注释)中自动连接;下

  • 我有一个使用SpringMVC和SpringBoot的项目,我使用IntelliJ。我的项目如下: 我用注释服务实现。 我用以下内容注释了配置文件 在控制器中,我向服务注入 在测试类中,我使用相同的注释注入相同的服务: 我用以下方法注释测试类: 在控制器中,注入工作正常,但是在测试类中,IntelliJ说: 无法自动连线。找不到WelcomeService类型的beans。 当我运行测试时,它是有

  • 我不确定我的代码出了什么问题。我正在学习弹簧靴。但我无法运行应用程序,因为我得到以下错误 模型类 主类:

  • 我已经尝试在测试类中的DAO Bean上使用@spy注释。我尝试在DAO bean上使用@mockbean。我尝试使用Mockito的doReturn和when功能来覆盖DAO的默认实现,但是,我总是从TestConfiguration中定义的测试DAO实现中返回结果。 我确实更改了我正在做的事情的文本,因为它是公司代码,但这正是我要做的。 我的TestConfiguration是这样定义的 期望

  • 我想尝试嵌入式数据库测试我的DAO对象在spring应用程序。 在应用程序上下文中,我有以下标记: 我的JUnit测试类需要使用这个bean: 一切正常(创建了“DataSourceEmbedded”bean),但当我试图在PartnerDAOTest类中自动调用它们时,spring抛出了以下异常: testSavePartner(Sandbox.PartnerDaoTest):创建名为“Sand