在 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
我正在做一个测试 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