我正在尝试为springboot应用程序中的一个简单控制器编写一个测试。但是,由于为我的TopicRepository和topiccontroller创建bean而收到错误。我参考了一个教程,对spring boot开发并不陌生,所以不确定它是如何工作的。我怎样才能使测试工作?
控制器测试
@RunWith(SpringRunner.class)
@WebMvcTest(TopicController.class)
public class TopicControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private TopicService topicService;
@Test
public void whenGetTopics_returnJSONArray()
throws Exception {
Topic topic = new Topic("b","b name", "b descp");
List<Topic> allTopics = new ArrayList<>();
allTopics.add(topic);
Mockito.when(topicService.getAllTopics()).thenReturn(allTopics);
mvc.perform(get("/topics")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$[0].id", is(topic.getId())));
}
}
控制器
@RestController
public class TopicController {
@Autowired
private TopicService topicService; //inject the topicService as a dependency
@Autowired
private TopicRepository topicRepository;
@RequestMapping("/topics")
public List<Topic> getAllTopics() {
return topicService.getAllTopics();
}
@RequestMapping("/topics/{name}")
public Topic getTopic(@PathVariable String name) {
return topicService.getTopic(name);
}
@RequestMapping(method=RequestMethod.POST, value= "/topics")
public void addTopic(@RequestBody Topic topic) {
topicService.addTopic(topic);
}
@RequestMapping(method=RequestMethod.PUT, value = "/topics/{Id}")
public void updateTopic(@RequestBody Topic topic, @PathVariable String Id){
topicService.updateTopic(topic, Id);
}
}
专题存储库
public interface TopicRepository extends CrudRepository<Topic, String>{
}
我得到的错误是
UnsatisfiedDependencyException:创建名为'topic controller'的bean时出错:通过字段'topic repository'表示的不满足依赖项;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:没有“IO.NKAMANOO.Springbootstarter.Repository.TopicRepository”类型的合格bean可用:应至少有一个合格的自动候选bean。依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}
springboot会自动扫描所有跟随基本包名称的包。例如,如果您的新springboot项目有Main类驻留在包com.Example.project中。
那你的
entities,repository,service,controller
null
因此,其他包名应按如下方式分组:
这解决了{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}的问题
您需要用@SpringBootTest注释您的测试类,以便它创建所有定义的bean并启动应用程序来运行测试用例。
在您的代码中:
@RunWith(SpringRunner.class)
@WebMvcTest(TopicController.class)
@SpringBootTest
public class TopicControllerTest {
}
假设我有很多团队,比如:“团队A,团队B…团队Z”,每个团队至少有5个组件。现在我想创建一个通用控制器,它可以响应任何类型的请求,这样我就可以获得关于团队成员的信息。 例如,我的控制器必须能够映射此请求: 团队课程可以是: 而且 显然它既可以执行也可以执行,重点是我不想为每个团队和每个数字指定一个控制器,我只想要一个可以响应的控制器。 我还需要指定它可以接受的字符串和值的范围(例如,最大值为5)。
我有一个简单的Spring靴计划-- 以下是项目结构- 如果我运行我的Spring Boot应用程序,它运行良好,没有任何错误。我能够通过我的rest控制器方法获取所有客户、获取单个客户、删除客户和添加客户。 null ps-(问题1)-->这里我得到的是 PropertyService.java HomeControllerTest.java
控制器文件位置 /_ 分组目录(如 /app) |_ controllers |_ 在此文件夹内创建控制器 控制器文件命名 [ 只支持字母 + 数字 ] 控制器名称.php 控制器代码编写规范 自定义控制器必须继承 grace 基础控制器! <?php class 控制器名称Controller extends grace{ //方法定义 publ
在使用JUnit进行测试时,我无法理解一些事情,我编写了一些测试,而有些测试似乎可以简单地使用 而且 有些似乎不能与它们一起工作,所以我必须使用 而且 我理解@mockbean是在处理spring容器时使用的,而@mock只是用来复制/模拟某个类及其方法。但是什么时候才是使用@mockbean的最佳时机呢? 上面是我在spring boot应用程序中为一个控制器编写的测试,但当我使用@mock模拟
新的Spring靴。 控制器中的API看起来像, 测试用例看起来像, 现在,在运行测试用例(命令1)后,我得到了以下结果 “java.lang.AssertionError:预期状态: 但“命令2”如期成功。 我的问题是, RestController Prefix Path Controller Prefix Path=整个路径。 为了调用API,我们必须遵循上面的格式,但是如果遵循相同的内容,