我在rest中编写函数来自动生成具有admin角色的用户。
UserController.java
@RestController
@RequestMapping("users")
public class UserController {
@Autowired
private UserRepository userRepo;
@Autowired
private TokenRepository tokenRepo;
@GetMapping("admin")
public String getAdmin () {
JSONObject report = new JSONObject();
String dataAdmin = userRepo.findByUsername("admin");
if(dataAdmin == null) {
User myadmin = new User();
myadmin.setUsername("admin");
myadmin.setFirstname("admin");
myadmin.setLastname("admin");
myadmin.setEmail("admin@admin");
myadmin.setRole("admin");
userRepo.save(myadmin);
report.put("message", "admin generated");
} else {
report.put("message", "admin only generated once");
}
return report.toString();
}
我试图按照这里的指示https://www.springboottutorial.com/unit-testing-for-spring-boot-rest-services。在 * 单元测试Http获取操作 * 部分。我得到了几个问题,也尝试不同的解决方案,直到我遇到这个Unit testing a Get request in a spring project从stackoverflow。下面是测试脚本,我已经到目前为止。
package blablaaa.order;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONObject;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import blablaaa.order.controller.UserController;
import blablaaa.order.dao.UserRepository;
import blablaaa.order.model.User;
//@ExtendWith(SpringExtension.class)
//@SpringBootTest
@WebMvcTest(value = UserController.class)
class OrderApplicationTests {
//
@Autowired
private MockMvc mockMvc;
@MockBean
private UserRepository userRepo;
@Test
void contextLoads() throws Exception{
User myadmin = new User();
myadmin.setUsername("admin");
myadmin.setFirstname("admin");
myadmin.setLastname("admin");
myadmin.setEmail("admin@admin");
myadmin.setRole("admin");
List<User> myUser = new ArrayList<>();
myUser.add(myadmin);
RequestBuilder rb = MockMvcRequestBuilders.get("/users/admin").accept(MediaType.APPLICATION_JSON);
MvcResult result = mockMvc.perform(rb).andReturn();
JSONObject expect = new JSONObject();
expect.put("message", "admin generated");
// System.out.println(result.toString());
System.out.println(expect.toString());
// Assertions.assertTrue(result.toString().contains(expect.toString()));
}
}
我不知道,测试应该如何编写。任何关键字有关这一点?
[更新]
下面是我的主要:
// OrderApplication.java
@SpringBootApplication
@EnableMongoRepositories("blablaaa.order.dao")
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
这是我的程序错误日志
Description:
Field tokenRepo in blablaaa.order.controller.UserController required a bean named 'mongoTemplate' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean named 'mongoTemplate' in your configuration.
2条答案
按热度按时间dphi5xsq1#
首先你要做的是清楚地理解你的方法
getAdmin
在做什么,其次要清楚地识别你的依赖项以及它们在main方法中是如何交互的。最后,你要定义你想要测试的东西,在你的例子中你有两个例子。if
例子和else
例子。在测试中,必须使用
when().thenReturn()...
定义模拟的行为测试方法如下所示:
有关详细信息:https://www.bezkoder.com/spring-boot-webmvctest/
lc8prwob2#
以前我是laravel用户。当我运行单元测试时,我不需要在运行测试场景之前运行应用程序。所以我认为,错误日志告诉我mongo数据库没有连接到应用程序,甚至应用程序本身也没有运行。
因此,根据我的情况,我需要确保首先运行应用程序,而不是构建。如果我只构建应用程序,程序将保持错误。
默认情况下,当你需要构建应用程序时,你需要确保应用程序也已经在运行了,SpringBoot也会在构建jar文件之前运行测试用例。
首先,运行应用程序
然后,