gpt4 book ai didi

java - Junit 在内存数据库中使用 h2 测试 @getmappings

转载 作者:行者123 更新时间:2023-12-01 19:56:51 29 4
gpt4 key购买 nike

我在对 DbRequest Controller 进行单元测试时遇到问题。我有一个单元测试正在运行,但我无法实现 DBRequest Controller GET 映射的单元测试,该映射使用 hibernate 进行数据库查找。我为 junit 测试创建了一个 H2 内存数据库。我尝试了各种不同的设置,但似乎没有一个能正常工作。

编辑了下面的内容,我得到了一个空指针,

java.lang.NullPointerException
at com.lmig.informaticaservice.api.DBcontroltest.saveTest(DBcontroltest.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

这是编辑后的测试。

@RunWith(SpringRunner.class)
@SpringBootTest

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class DBcontroltest {



@Autowired
DbRequest dbRequest;


@Autowired
ConnectionRequestRepository connectionRequestRepository;

private MockMvc mockMvc;
// @Autowired
//private TestEntityManager entityManager;



@Test
public void saveTest() throws Exception {
ConnectionRequest connectionRequest = new ConnectionRequest((long) 1, "test");
connectionRequestRepository.save(connectionRequest);


System.out.println(connectionRequestRepository.findAll().toString());

mockMvc.perform(get("/api/selectDB/{connectionId}" ,1))
.andExpect(status().isOk());


}

}


Typical JPA repository

package com.test.models;

import org.springframework.data.jpa.repository.JpaRepository;

public interface ConnectionRequestRepository extends JpaRepository<ConnectionRequest, Long> {

}

这是我的 Controller 。

package com.test.api;

import com.models.ConnectionRequest;
import com.test.models.ConnectionRequestRepository;

import java.util.List;

import javax.validation.Valid;

import lombok.Data;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Data
@RestController
@RequestMapping("/api/")
public class DbRequest {

@Autowired
private ConnectionRequestRepository connectionRequestRepository;
private ConnectionRequest connectionRequest;

@GetMapping("/selectDB")
public List<ConnectionRequest> getAllRequests() {
return connectionRequestRepository.findAll();
}

@GetMapping("/selectDB/{connectionId}")
public ResponseEntity<ConnectionRequest> getRequestById(@PathVariable("connectionId") Long connectionId) throws Exception {
ConnectionRequest connectionRequest = connectionRequestRepository.findById(connectionId)
.orElseThrow(() -> new Exception("Connection Request " + connectionId + " not found"));
return ResponseEntity.ok().body(connectionRequest);
}
}

这是数据库的模型。

package com.testing.models;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@Data
@Entity
@Table(name = "connrequest", schema = "testschema")
@AllArgsConstructor
@NoArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public class ConnectionRequest {

@Id
@Column(name = "connection_id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long connectionId;

@Column(name = "requestor", nullable = false)
private String requestor;
}

最佳答案

看起来 ConnectionRequest 的 PK 上的注释是问题所在。

注释@GenerateValue告诉JPA它需要确定该值,因此任何为ID提供的值都将被主动丢弃。来自文档

Indicates that the persistence provider must assign primary keys for the entity using a database identity column.

要解决此问题,请尝试删除该注释,这样您必须始终提供 ID,或者,在测试中保存实体后,获取 ID 已分配并使用该 ID 调用 connectionRequestRepository.getOne()

关于java - Junit 在内存数据库中使用 h2 测试 @getmappings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59033907/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com