java中cucumber的单元测试异常场景

java中cucumber的单元测试异常场景,java,junit,cucumber,Java,Junit,Cucumber,我遵循BDD方法并使用cucumber执行单元测试 我的课程如下所示 public class EmployeeServiceImpl { private static Log log = LogFactory.getlog(EmployeeServiceImpl.class); @Autowired private EmployeeDao employeeDao; public void saveEmployee(Employee emp) throws Exception {

我遵循BDD方法并使用cucumber执行单元测试 我的课程如下所示

public class EmployeeServiceImpl {

private static Log log = LogFactory.getlog(EmployeeServiceImpl.class);

@Autowired
private EmployeeDao employeeDao;

public void saveEmployee(Employee emp) throws Exception {
    try {
employeeDao.saveemployee(emp);
      } catch (Exception ex) {
            log.error("Error occured "+ex);
      }
  }
}

有谁能帮我写一下上面代码片段的异常场景吗

我将使用的算法如下:

@Test
public void verify_logging() throws Exception {
    Log log = mock(Log.class);

    Employee emp = new Employee();

    saveEmployee(emp);

    verify(log, times(1)).error("Error occured");
}
private Log log;
private Employee emp;

@Given("prepare employee")
public void given() {
    Log log = mock(Log.class);

    Employee emp = new Employee();
}

@When("save employee")
public void when() throws Exception {
    saveEmployee(emp);
}

@Then("exception should be logged")
public void then() {
    verify(log, times(1)).error("Error occured");
}
  • 准备参数emp,使其抛出预期错误
  • 调用该方法
  • 验证是否发生了与日志的交互
我会使用Mockito来验证交互

JUnit解决方案可能如下所示:

@Test
public void verify_logging() throws Exception {
    Log log = mock(Log.class);

    Employee emp = new Employee();

    saveEmployee(emp);

    verify(log, times(1)).error("Error occured");
}
private Log log;
private Employee emp;

@Given("prepare employee")
public void given() {
    Log log = mock(Log.class);

    Employee emp = new Employee();
}

@When("save employee")
public void when() throws Exception {
    saveEmployee(emp);
}

@Then("exception should be logged")
public void then() {
    verify(log, times(1)).error("Error occured");
}
通过以下三个步骤将其转换为Cucumber:

@Test
public void verify_logging() throws Exception {
    Log log = mock(Log.class);

    Employee emp = new Employee();

    saveEmployee(emp);

    verify(log, times(1)).error("Error occured");
}
private Log log;
private Employee emp;

@Given("prepare employee")
public void given() {
    Log log = mock(Log.class);

    Employee emp = new Employee();
}

@When("save employee")
public void when() throws Exception {
    saveEmployee(emp);
}

@Then("exception should be logged")
public void then() {
    verify(log, times(1)).error("Error occured");
}

您的任务是为步骤方法以及更好的步骤提供更好的名称。

验证(..)来自何处?这就是使用Mockito检查交互的方式。这种转换真的带来了好处吗?