控制器.java
@RestController
public class Controller {
@Autowired
private UserService userService;
@Autowired
private BookService bookService;
//Below userService implementation
@PostMapping(value = "/addNewUser", consumes = "application/json")
public void addNewUser(@RequestBody User newUser) {
userService.addNewUser(newUser);
}
@GetMapping(value = "/findUserById/{id}", produces = "application/json")
public User findUserById(@PathVariable("id") Long id) {
return userService.findUserById(id);
}
@GetMapping(value = "/findUserByName/{name}", produces = "application/json")
public User findUserByName(@PathVariable("name") String name) {
return userService.findUserByName(name);
}
UserServiceImpl.java
@Transactional
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public void addNewUser(User newUser) {
userRepository.save(newUser);
}
存储库.java
public interface UserRepository extends CrudRepository<User, Long> {
Optional<User> findUserByName(String name);
Optional<User> findUserBySurname(String surname);
}
控制器测试.java
//@RunWith(SpringRunner.class)
@RunWith(MockitoJUnitRunner.class)
@WebMvcTest(Controller.class)
public class ControllerTest {
// @MockBean
// private UserService userService;
//
// @MockBean
// private BookService bookService;
@Mock
private UserService userService;
@Mock
private BookService bookService;
@Autowired
private MockMvc mockMvc;
@Test
public void test(){
}
}
上面的配置工作正常,但下面不行。
@RunWith(SpringRunner.class)
//@RunWith(MockitoJUnitRunner.class)
@WebMvcTest(Controller.class)
public class ControllerTest {
@MockBean
private UserService userService;
@MockBean
private BookService bookService;
// @Mock
// private UserService userService;
//
// @Mock
// private BookService bookService;
@Autowired
private MockMvc mockMvc;
@Test
public void test(){
}
}
我得到这个错误
应用程序无法启动
描述:
一个组件需要一个名为“entityManagerFactory”的 bean,但无法找到。
行动:
考虑在配置中定义一个名为“entityManagerFactory”的 bean。
2018-11-26 21:58:32.343 错误 7385 --- [main] ostest.context.TestContextManager:在允许 TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@5c7bfdc1] 准备测试实例时捕获异常[com.webservices.example.librarydatabaseservice.controller.ControllerTest@74f827ad]
68) ~[junit-rt.jar:na] at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) ~[junit-rt.jar:na] at com.intellij。 rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) ~[junit-rt.jar:na] at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) ~[junit -rt.jar:na] 原因:org.springframework.beans.factory.BeanCreationException:创建名为“bookRepository”的 bean 时出错:无法创建类型为 [org.springframework.orm. jpa.SharedEntityManagerCreator] 同时设置 bean 属性'entityManager';嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名称为 '(inner bean)#3f362135' 的 bean 时出错:设置构造函数参数时无法解析对 bean 'entityManagerFactory' 的引用;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:327) ~[spring-beans-5.1.2 .RELEASE.jar:5.1.2.RELEASE] 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:131) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2。 RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1648) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE] 在 org.springframework.beans。springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117) ~[spring-test-5.1.2.RELEASE.jar:5.1.2.RELEASE] ...省略了25个常见框架原因:org. springframework.beans.factory.BeanCreationException:创建名称为'(inner bean)#3f362135'的bean时出错:设置构造函数参数时无法解析对bean'entityManagerFactory'的引用;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378) ~[spring-beans-5.1.2 .RELEASE.jar:5.1.2.RELEASE] 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver。
它说 entityFactoryManager 存在问题,但它以一种模拟方式工作,而另一种则不是......
完整代码Github 仓库
我在版本中使用 SpringBoot:2.1.0.RELEASE