我正在尝试使用SpringJUnit4ClassRunner创建junit测试用例。
@Configuration
@ComponentScan(basePackages = { "com.controller",
"com.service",
"com.repository" })
class CustomConfiguration {
}
@RunWith(SpringJUnit4ClassRunner.class)
@org.springframework.test.context.ContextConfiguration(classes = CustomConfiguration.class)
public class Test {
@InjectMocks
@Spy
private EmployeeController employeeController;
@Mock
EmployeeService employeeService;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
@org.junit.Test
public void test() throws Exception {
Employee employee = new Employee();
employee.setEmailId("admin@gmail.com");
employee.setFirstName("admin");
employee.setLastName("admin");
Employee employee = employeeController.createEmployee(employee);
assertNotNull(employee);
}
}
给出类型为EmployeeRepository的没有合格bean的错误。
答案 0 :(得分:0)
似乎很难为测试创建一个自定义配置类,但不会通过类路径扫描在后台创建存储库bean。如果您的目标是集成测试用例而不是junit,因为您似乎没有在所提供的代码中模拟任何东西,那么为什么不尝试使用更多更新的注释版本,例如使用SpringRunner.class而不是SpringJunit4Runner。 class,如果您的spring版本支持它。如果您只是想创建一个单元测试用例。为您想要模拟的东西创建一个模拟bean:
@Mock
SomeRepository repo;
此模拟在由junit启动时应自动注入到您的服务bean中。 如果您正在使用springboot,则:
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test {
@Mock
EmployeeService employeeService;
@InjectMocks
private EmployeeController employeeController;
@org.junit.Test
public void test() throws Exception {
Employee employee = new Employee();
employee.setEmailId("admin@gmail.com");
employee.setFirstName("admin");
employee.setLastName("admin");
when(employeeService.save(any)).thenReturn(employee);
Employee employee = employeeController.createEmployee(employee);
assertNotNull(employee);
}
}
以上是在springboot中进行单元测试的典型示例,但是对于您的控制器类,springboot提供注释@WebMvcTest
或仅对Web层进行单元测试。如果要这样做,请阅读{ {3}}。