Spring 在没有MockMvc的情况下为RestAPI编写Spock测试
我需要为以下代码编写Spock测试,但我不知道如何在Spock测试中使用我的控制器(我以前从未编写过Spock测试)。你能给我一个简单的例子,让我了解测试的结构吗 从控制器获取映射程序:Spring 在没有MockMvc的情况下为RestAPI编写Spock测试,spring,groovy,spock,Spring,Groovy,Spock,我需要为以下代码编写Spock测试,但我不知道如何在Spock测试中使用我的控制器(我以前从未编写过Spock测试)。你能给我一个简单的例子,让我了解测试的结构吗 从控制器获取映射程序: @GetMapping("/users/{id}") public ResponseEntity<Optional<UserResource>> getUserById(@PathVariable long id) { final
@GetMapping("/users/{id}")
public ResponseEntity<Optional<UserResource>> getUserById(@PathVariable long id) {
final Optional<User> userOptional = userService.findById(id);
final Optional<UserResource> userResourceOptional = userOptional.map(userMapper::mapToResource);
return ResponseEntity.ok(userResourceOptional);
}
我的斯波克尝试:
void 'get user return his profile'(){
given:
def result = userService.findById(1) >> Optional.of(jon)
def response = jonJsonString.toString()
when:
controller.getUserById()
then:
response == result
}
提前感谢userService只是一个mock,jonJsonString是一个带有数据的对象,Controller是userController。但是我解决了这个问题。我忘了问正确的期望。因此,对于以下人员,这是一个样本斯波克测试:
import spock.lang.*
class Specs extends Specification {
UserController controller
UserService userService
HashService hashService
UserMapper userMapper
TokenService tokenService
TokenMapper tokenMapper
ObjectMapper mapper = new ObjectMapper()
User john
User wick
String johnJsonString
String wickJsonString
void setup(){
controller = new UserController(userService, hashService, userMapper, tokenService, tokenMapper)
userService = Mock UserService
hashService = Mock HashService
tokenService = Mock TokenService
userMapper = Mappers.getMapper(UserMapper.class)
tokenMapper = Mappers.getMapper(TokenMapper.class)
john = new User([id: 1, name: 'John', email: 'sth@mail.de'])
wick = new User([id: 2, name: 'Wick', email: '123123@123123.de'])
johnJsonString = mapper.writeValueAsString(john)
wickJsonString = mapper.writeValueAsString(wick)
}
void 'get user return a list of users'(){
setup:
userService.findAll() >> [john, wick]
when:
def result = controller.getUsers();
expect:
result.statusCode.value() == 200
result.body != null
result.body.size() == 2
}
void 'get user returns his profile'() {
setup:
userService.findById(1) >> Optional.of(john)
def response = Optional.of(john)
expect:
userService.findById(1) == response
}
欢迎来到SO。请学习如何通过提问方式提问,然后将问题编辑为一。例如,您的测试不是一个完整的类,只是挂在空中的一个片段,没有任何上下文:测试中如何定义
userService
、jonJsonString
和controller
?如何在应用程序类中定义/注入userService
?我们应该猜猜吗?我认为那对你没有多大帮助。请提供一套完整的示例类,我们可以复制、编译和运行。非常感谢你。这些信息应该在问题中,而不仅仅是在答案中。恭喜你解决了自己的问题。但是,我建议你删除这个问题,因为如果没有答案中的完整代码,这个问题是不可回答的,但是有了答案,就没有其他问题了。因此,这个问题在这里没有任何价值。
import spock.lang.*
class Specs extends Specification {
UserController controller
UserService userService
HashService hashService
UserMapper userMapper
TokenService tokenService
TokenMapper tokenMapper
ObjectMapper mapper = new ObjectMapper()
User john
User wick
String johnJsonString
String wickJsonString
void setup(){
controller = new UserController(userService, hashService, userMapper, tokenService, tokenMapper)
userService = Mock UserService
hashService = Mock HashService
tokenService = Mock TokenService
userMapper = Mappers.getMapper(UserMapper.class)
tokenMapper = Mappers.getMapper(TokenMapper.class)
john = new User([id: 1, name: 'John', email: 'sth@mail.de'])
wick = new User([id: 2, name: 'Wick', email: '123123@123123.de'])
johnJsonString = mapper.writeValueAsString(john)
wickJsonString = mapper.writeValueAsString(wick)
}
void 'get user return a list of users'(){
setup:
userService.findAll() >> [john, wick]
when:
def result = controller.getUsers();
expect:
result.statusCode.value() == 200
result.body != null
result.body.size() == 2
}
void 'get user returns his profile'() {
setup:
userService.findById(1) >> Optional.of(john)
def response = Optional.of(john)
expect:
userService.findById(1) == response
}