我是春季靴子的新手。需要一些建议 这是我的单元测试类
dependencies {
compile 'com.google.code.gson:gson:2.2.+'
}
}
当我运行它时,我得到例外
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = DemoApplication.class)
public class EmployeeRepositoryTest {
@Autowired
protected EmployeeRepository employeeRepository;
@Test
public void insertEmploee(){
Employee employee = new Employee();
employee.setEmpName("Azad");
employee.setEmpDesignation("Engg");
employee.setEmpSalary(12.5f);
employeeRepository.save(employee);
}
处理以退出代码-1
结束答案 0 :(得分:1)
似乎你的问题已经解决了(混合了Spring依赖版本)但是我只想扩展@ g00glen00b关于如何编写单元测试的注释。
确保pom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
正如评论中指出的那样,@RunWith(SpringJUnit4ClassRunner.class)
会导致单元测试启动整个应用程序,而是用于集成测试。
幸运的是,Spring-boot依赖于 Mockito ,这正是你需要的单元测试。
现在,您的单元测试看起来像这样:
public class EmployeeRepositoryTest {
@InjectMocks
private EmployeeRepository employeeRepository;
@Mock
private Something something; // some class that is used inside EmployRepository (if any) and needs to be injected
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void insertEmploee(){
Employee employee = new Employee();
employee.setEmpName("Azad");
employee.setEmpDesignation("Engg");
employee.setEmpSalary(12.5f);
employeeRepository.save(employee);
Mockito.verify(...); // verify what needs to be verified
}
}
可以找到关于使用Mockito的好文章,例如here。
答案 1 :(得分:0)
我们可以使用@Autowired
而不是在EmployeeRepository
上使用@MockBean
,因为我们正在编写单元测试,我们不需要处理真实数据,我们只需要验证函数即可工作正常与否。检查以下代码
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Main.class)//main springboot class
@WebAppConfiguration
public abstract class AbstractBaseTest {
protected MockMvc mvc;
@Autowired
WebApplicationContext webApplicationContext;
protected void setUp() {
mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
}
public class EmployeeRepositoryTest extends AbstractBaseTest{
@MockBean
protected EmployeeRepository employeeRepository;
@Override
@Before
public void setUp() {
super.setUp();
}
@Test
public void insertEmploee(){
Employee employee = new Employee();
employee.setEmpName("Azad");
employee.setEmpDesignation("Engg");
employee.setEmpSalary(12.5f);
Mockito.doNothing().when(employeeRepository).save(Mockito.any(Employee.class));
employeeRepository.save(employee);
Mockito.verify(employeeRepository, Mockito.times(1)).save(employee);
}
}