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

如何用JdbcTemplate为我的Rest控制器编写单元测试类

邵捷
2023-03-14

我对Spring boot和JUnit是新手。我在Spring Boot中有一个Rest服务,在那里我接收请求,使用请求参数查询数据库,从查询中接收结果并将其作为响应发送。

我的控制器代码如下所示:

@Autowired
JdbcTemplate mTemplate;

@GetMapping("/myservice")
    public String getGreeting2(@RequestParam(value = "name") String name) {
        //DO the query using mTemplate;
    }

我的JdbcTemplate被作为一个单独类中的bean处理,如下所示

@Bean
public JdbcTemplate dataSource(){
         BasicDataSource ds = new BasicDataSource();
         ds.setDriverClassName(....);
         ds.setUrl(...);
         ds.setUserName(...);
         ds.setPassword(...);
         return new JdbcTemplate(ds);
}

我的代码运行良好。

现在我想使用JUnit4为我的控制器编写单元测试。我使用MockMvc发送请求,但我的单元测试从未起飞。它总是抛出异常:“无法解析bean数据源……无法加载合适的驱动程序类”

我曾尝试在src/test/java中的application.properties文件中提供数据源细节,但不起作用。我想我错过了一些基本的过程。请指导我使用数据源为rest控制器编写junit测试需要采取的步骤。类似于这样:

@Runwith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MyRestControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void getHello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/myservice").param("name", "..."))
                .andExpect(status().isOk());
                
    }

附言。由于Rest控制器的主类中没有数据源,测试运行良好。

共有1个答案

商麒
2023-03-14

在本例中,您要做的是一个集成测试,尝试在测试类中使用以下注释:

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = Application.class)
    @WebAppConfiguration

但是,也许您只想测试您的控制器,在本例中,您可以像下面这样模拟JdbcTemplate:

    @InjectMocks
    private YourController yourController;

    @Mock
    private JdbcTemplate mTemplate;

    @Before
    public void before() {
        MockitoAnnotations.initMocks(this);
        MonitoringHelper.initMocks();
        intelligencePostFilter = new IntelligencePostFilter(intelligenceService);
        when(mTemplate.methodX()).thenReturn(....);
    }

在本例中,没有测试类的注释

 类似资料:
  • 我必须在Spring Boot中为Web服务编写单元测试,它应该从Controller执行测试,并流入Service类。我正在为Service类使用@Mock注释,为Controller使用@InjectMock,因此应用程序流永远不会进入Service类内部(它返回一个null)。 如果没有对 Service 类@Mock注释,我会收到空点异常。 我不想模仿服务类,我想用这个相同的测试单元测试服

  • 试图弄清楚我是否可以使用spring kafka和spring kafka测试为@KafkaListener编写单元测试。 我的听众课。 我的测试类别: 我的测试配置类: 有什么简单的方法可以做到这一点吗? 或者我应该以其他方式测试@KafkaListener?在单元测试中,如何确保在Kafka中收到新消息时调用@KafkaListener。

  • 我有两个控制器,一个用于用户,一个用于角色。我已经为用户控制器编写了测试,但是当我尝试运行测试时,它会给我以下错误: "由以下原因引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的'uk.co.circuare.cube.service.user.repository.RoleRepository'类型的

  • 我正在编写一个Spring boot Rest控制器的测试。这个rest控制器将一些值写入DB。 我想使用Spring为这个测试提供的内存数据库。根据这个文档,我必须用注释测试类,这导致了这个错误: 在错误堆栈跟踪中,我看到抛出了以下异常: 的replace属性 这是我正在研究的测试类: 是什么导致了这个错误? 编辑2 我在中添加了以下内容: 我创建了,内容如下: 用户名和密码是什么?我应该把它们

  • 问题内容: 函数打印到控制台。我想测试控制台打印。我如何在python中实现呢? 需要测试这个功能,没有返回语句: 我的测试: 问题答案: 您可以通过临时重定向到一个对象来轻松捕获标准输出,如下所示: 该程序的输出为: 说明重定向成功捕获了输出,并且您能够将输出流还原到开始捕获之前的状态。 请注意,上面的代码针对Python 2.7,如问题所示。Python 3稍有不同:

  • 问题内容: 初始化JavaFX运行时的正确方法是什么,以便您可以对使用并发工具和的控制器进行单元测试(使用JUnit)? 从该方法调用会导致死锁。如果未调用,则会引发以下错误: 后续:这是我根据@SergeyGrinev的建议一直使用的主题。 问题答案: 调用由是正确的做法。请注意,这不会将控制权返回给调用代码。因此,您必须将其包装到中。 7年后的更新: 使用TestFX!它将以适当的方式进行启动