【发布时间】:2022-01-22 21:31:38
【问题描述】:
同学们,欢迎大家!告诉我如何决定,或如何行动。 (Java11, SpringBoot, testing - Spock Framework) 我需要写一个测试来测试一个类的方法,整个问题是被测类的方法通过继承调用另一个服务,在被测类中没有声明,但在它的抽象祖先中。如何测试这样的故事?如果这个服务是在被测类本身中声明的,那么一切都清楚了,我会在测试中创建一个模拟并将它传递给构造函数,但是如果这个服务位于祖先呢?我在下面附上一个示例代码。
// The class to be tested
@Service
public class ServiceForTest extends AbstractComponent{
public String methodForTest (String s) {
return someService.generateString(s);
}
}
//An abstract class from which the tested one is inherited and which contains the service
public class AbstractComponent {
@Autowired
protected SomeService someService;
}
public interface SomeService {
String generateString(String s);
}
@Service
public class SomeServiceImpl implements SomeService{
@Override
public String generateString(String s) {
return s;
}
}
下面是一个例子,如果服务在被测试的类中,我会做什么
//TestClass
@Service
public class ServiceForTest extends AbstractComponent{
final SomeService someService;
public ServiceForTest(SomeService someService) {
this.someService = someService;
}
public String methodForTest (String s) {
return someService.generateString(s);
}
}
类测试 groovy,Spock 框架
class ServiceForTestTest extends Specification {
ServiceForTest serviceForTest
void setup(){
SomeService someServiceMock = Mock(SomeService)
someServiceMock.generateString("TEST") >> "TEST"
serviceForTest = new ServiceForTest(someServiceMock)
}
def "Test for return current value"(){
when:
def methodForTest = serviceForTest.methodForTest("TEST")
then:
methodForTest == "TEST"
}
}
【问题讨论】:
标签: java unit-testing groovy mocking spock