gpt4 book ai didi

java - DB H2 和 Controller 的集成测试

转载 作者:行者123 更新时间:2023-11-28 20:49:55 24 4
gpt4 key购买 nike

我的程序中有两个集成测试,不幸的是两个都不起作用。我不知道在一个案例中写这两个问题是个好主意,但我试过了。首先我展示我的数据库集成测试:

@RunWith(SpringRunner.class)
@DataJpaTest
public class TeamDatabaseIntegrationTest {

@MockBean
private TeamRepository teamRepository;

@Autowired
private TestEntityManager testEntityManager;

@Test
public void testDb() {
Team team = new Team(1L, "teamName", "teamDescription", "krakow", 7);
Team team2 = new Team(2L, "teamName", "teamDescription", "krakow", 7);
testEntityManager.persist(team);
testEntityManager.flush();

Iterable<Team> teams = teamRepository.findAll();
assertThat(teams).hasSize(2).contains(team, team2);
}

在这个测试中,我向我的数据库添加了 2 个元素,并期望这个测试没问题,但它返回了这个:

java.lang.AssertionError: 
Expected size:<2> but was:<0> in:
<[]>

在我的第二个测试中,我想测试 Controller 方法显示所有元素。这是我在 Controller 中的方法:

@GetMapping("/teams")
public List<TeamDto> findAll() {
return teamService.findAll();
}

我对此的测试方法如下所示:@SpringJUnitWebConfig(classes = CrewApplication.class)

public class TeamControllerMethodIntegrationTest {
private MockMvc mockMvc;

@Autowired
private WebApplicationContext webApplicationContext;

@Before
public void setup() throws Exception
{
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build();
MockitoAnnotations.initMocks(this);
}

@Test
void getAccount() throws Exception {
this.mockMvc.perform(get("/teams")
.accept(MediaType.parseMediaType("application/json;charset=UTF-8")))
.andExpect(status().isOk())
.andExpect(content().contentType("application/json;charset=UTF-8"))
.andExpect(jsonPath("$version").value(null))
.andExpect(jsonPath("$name").value("Apacze"))
.andExpect(jsonPath("$createOn").value(null))
.andExpect(jsonPath("modifiedOn").value(null))
.andExpect(jsonPath("$description").value("grupa programistow"))
.andExpect(jsonPath("$city").value("Włocławek"))
.andExpect(jsonPath("$headcount").value(null));
}
}

在这种情况下,我还有其他错误。

java.lang.NullPointerException
at com.softwaremind.crew.people.integrationTest.TeamControllerMethodIntegrationTest.getAccount

我为这个测试奋斗了一个星期,我真的不知道如何修复它。

最佳答案

在你的第一种情况下替换

@MockBean
private TeamRepository teamRepository;

@Autowired
private TeamRepository teamRepository;

(您不能使用 mock 并期望它从内存数据库中返回值)

给你第二次测试。移除 @SpringJUnitWebConfig 并用

注释
@RunWith(SpringRunner.class)
@WebMvcTest()

并将Autowired添加到MockMvc

@Autowired
private MockMvc mockMvc;

编辑

另外删除您的 setup() 方法,因为一切都应该已经配置好了。 (然后您也不需要 webApplicationContext 属性)并断言您使用的 Test 注释是 org.junit.Test(检查您的导入)

关于java - DB H2 和 Controller 的集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50810490/

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