春季启动单元测试

时间:2016-02-17 09:18:07

标签: java junit spring-boot

我是春季靴子的新手。需要一些建议 这是我的单元测试类

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

结束

2 个答案:

答案 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);

}
}