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

如何在Controller中模拟删除测试?

皇甫聪
2023-03-14

所以我第一次在spring boot测试时遇到了一个问题。当我执行测试时,这些值实际上被删除了。我更愿意对此进行模拟,这样这些值就不会被删除。

我的测试类:@SpringBootTest@AutoConfiguremockMVC

@Autowired
private MockMvc mockMvc;

@Test
@DisplayName("Should Not give access to endpoint")
public void ShouldNotGiveAccess() throws Exception{
    mockMvc.perform(MockMvcRequestBuilders.get("/parties"))
            .andExpect(MockMvcResultMatchers.status().is(401));
}

@Test
@WithMockUser("JLardinois")
@DisplayName("Should respond with not found request")//is 401 because first authorized then check if its found
public void shouldNotFindRequest() throws Exception{
    mockMvc.perform(MockMvcRequestBuilders.get("/partyy")).andExpect(MockMvcResultMatchers
    .status().is(404));
}

@Test
@WithMockUser("JLardinois")
public void ShouldFindRequest() throws Exception{
    mockMvc.perform(MockMvcRequestBuilders.get("/parties")).andExpect(MockMvcResultMatchers
            .status().isOk());
}

@Test
@WithMockUser("JLardinois")
public void DeleteParty() throws Exception{
    mockMvc.perform(MockMvcRequestBuilders.delete("/parties/4")).andExpect(MockMvcResultMatchers
            .status().isOk());
}

共有1个答案

叶鸿振
2023-03-14

首先,您不应该在真实的数据库上运行测试。测试不应该以任何方式与环境相关。如果您希望将测试与数据库集成,请注意testcontainers,您可以根据需要选择框架和数据库。您的测试配置不应该包含实际的基本值,如果没有,请创建测试配置(在src/test/resources中的application.yaml)。

如果您不想要集成测试,则模拟您的存储库:

 @MockBean
 private MyRepository myRepository;
 @Before
 public void init() {
    Mockito.doNothing().when(myRepository).delete(any());
 }
 类似资料:
  • 问题内容: 我有一个Spring 3.2 MVC应用程序,并且正在使用Spring MVC测试框架来测试控制器操作上的GET和POST请求。我正在使用Mockito模拟服务,但是发现模拟被忽略并且正在使用我的实际服务层(因此,数据库被命中)。 我的Controller测试中的代码: 你会注意到我有两个上下文配置文件;这是一个黑客,因为如果我无法阻止控制器测试到达实际的服务层,则该服务层也可能会将其

  • 我使用Spring MVC和Spring boot编写一个Restful服务。当我对控制器进行单元测试以接受post请求时,模拟的myService将始终初始化自己,而不是返回由when...ThenReturn...定义的模拟值。我使用verify(MyService,times(1)).ExecuteRule(any(MyRule.Class));并显示未使用模拟。我还尝试为mockMoc使用

  • 问题内容: 我正在使用RestTemplate 方法发布到端点。在我的测试文件中,我正在测试POST方法。但是用我目前的测试,我得到了POST请求。在测试文件中发出POST请求时,我需要模拟API的帮助 这是我的主文件 这是我的测试文件 问题答案: 您正在测试DataTestRepo类内部的逻辑,因此您不应模拟它。RestTemplate是DataTestRepo内部的一个依赖项,因此这正是您需要

  • 我在Android Studio上做一个项目,在那里我使用了一些库。但是其中的一个库/模块没有任何用处。现在我要移除/删除那个特定的模块。但是当我右键点击那个模块时,没有删除选项显示。然后我转到C驱动器中的Android Project文件夹,删除了该模块的文件夹。但是这个空模块仍然在android Studio中显示。怎么把它完全去掉??

  • 我知道Dan North设计BDD的意图之一是将词汇表从复杂的测试域中移开。然而,在实现由外到内的方法时,我们似乎仍然需要对模仿行为(或者,如果您愿意的话)有一些了解。North在这个视频中建议,如果我从最外层的域对象开始,然后向内工作,我会在发现合作者时模仿它们,然后用适当的实现替换它们。所以最后,我以一组端到端测试结束。 Martin Fowler在这篇博客文章中定义了TDD的两个阵营:“古典

  • 说我有以下路线: 让我们假设根据RabbitMQ使用的消息调整和。 我想对3个场景进行单元测试: null 我的问题是:如何模拟/存根RabbitMQendpoint,以便路由在生产中正常执行,但不必实际将测试连接到RabbitMQ服务器?我需要某种“模拟信息”制作人。 一个代码示例或代码片段将非常有帮助,非常感谢!