在 groovy class Spock 框架单元测试用例中声明字段

Declare Fields in groovy class Spock framework Unit test Case

我正在做一个测试 Class 来测试员工服务,一切正常,除了当我在其他函数中使用字段时它变为空。

 // field
 Employee employee;
 // this will be assigned to return of below 
 employee= employeeService.create(emp);
 // this(employee) gets null

现在要的是使用

         employeeService.remove(employee.getId);

删除测试功能,

下面是我的代码。请提供一些建议

我是 groovy 的新手。

package services.employee
import spock.lang.Specification
@ContextConfiguration(loader =          SpringApplicationContextLoader.class,classes = Application.class)
class EmployeeSpec extends  Specification{

  @Autowired
  EmployeeService employeeService;

Employee response = null;
 def "Check if Employee exists"(){
    setup:
    long empid = 43;

    when:
    empid > 0

    then:
    employeeService.getEmployee(empid);
 }

def "Find all Employee"(){
    setup:

    when:
    def res = employeeService.getAllEmployees();

    then:
    res.size()>0;
}

def "Insert a New Employee"(){

    setup:
    Employee employee = new Employee();
    employee.setName("Ajit Singh");
    employee.setCity("Delhi");
    employee.setAge(34);

    when:
    response = employeeService.createEmployee(employee);

    then:
    response.getName().equals("Ajit Singh");

}

def "Updating an Employee"(){


}

def "delete an Employee"(){
    setup:
    if (response.equals(null))
        println("Object is null");

      when:
      employeeService.removeEmployee(response.empID)

     then:
     def res = employeeService.find(response.empID);
     res == null;
}

}

虽然 Ivans 上面的回答有效,但在 Spock 中执行此操作的正确方法是使用 @Shared 注释:

@Shared Employee response = null

(参见 https://spockframework.github.io/spock/docs/1.1-rc-1/all_in_one.html#_fields

引用文档为什么这是正确的方法:

Static fields should only be used for constants. Otherwise shared fields are preferable, because their semantics with respect to sharing are more well-defined.

是的,您可以使用@Shared 标签,使用该标签声明的变量可能是 java 或 C 中的全局变量。 我不知道您的 'createEmployee' 函数返回什么,但这在 groovy 中不是问题,因为您可以使用 'def' 类型而不是所有类型。
因此,您只需添加 @Shared def response = null