Spock 方法模拟
Spock method mocking
我有方法负责将传递给它的对象的标志更改为禁用。目的是测试该方法是否更改了该标志。我正在为此使用 spock 框架。方法在接口上调用并由 JPA 实现 module.I 找不到任何方法来模拟此方法
Interface MyService {
public void update();
}
interface MyRepositoryService {
//implemented by JPA module
public void update(MyObject myObject);
}
class MyObject {
//..
private boolean disable;
//..
}
规格下的模块:
class MyServiceImplementation implements MyService {
private MyRepositoryService myRepositoryService;
//method to be mocked
void update(MyObject myObject){
//...
myRepository.update(myObject)
//...
}
}
不确定我是否遗漏了 smth,但只需声明一个 Mock - 如果您要测试对象之间的交互 - 或者 Stub 如果您只想测试方法行为。
实例化你的测试对象调用构造函数,手动将模拟对象传递给它并编写你的测试代码。
使用 Groovy 语法举个简单的例子:
class MyServiceImplementationUnitTest extends Specification {
def Repository repository = Mock(Repository)
@Subject MyService service = new MyService(
...
repository // the mock
)
// an example guidelines for a possible test
def "this is a test"() {
given: "an input object"
def inputObject = SMTH
when: "we call update method with that object"
service.update(inputObject)
then: "repository's update method is called once with expected parameter"
1 * repository.update(inputObject)
}
}
我有方法负责将传递给它的对象的标志更改为禁用。目的是测试该方法是否更改了该标志。我正在为此使用 spock 框架。方法在接口上调用并由 JPA 实现 module.I 找不到任何方法来模拟此方法
Interface MyService {
public void update();
}
interface MyRepositoryService {
//implemented by JPA module
public void update(MyObject myObject);
}
class MyObject {
//..
private boolean disable;
//..
}
规格下的模块:
class MyServiceImplementation implements MyService {
private MyRepositoryService myRepositoryService;
//method to be mocked
void update(MyObject myObject){
//...
myRepository.update(myObject)
//...
}
}
不确定我是否遗漏了 smth,但只需声明一个 Mock - 如果您要测试对象之间的交互 - 或者 Stub 如果您只想测试方法行为。
实例化你的测试对象调用构造函数,手动将模拟对象传递给它并编写你的测试代码。
使用 Groovy 语法举个简单的例子:
class MyServiceImplementationUnitTest extends Specification {
def Repository repository = Mock(Repository)
@Subject MyService service = new MyService(
...
repository // the mock
)
// an example guidelines for a possible test
def "this is a test"() {
given: "an input object"
def inputObject = SMTH
when: "we call update method with that object"
service.update(inputObject)
then: "repository's update method is called once with expected parameter"
1 * repository.update(inputObject)
}
}