我需要为以下代码编写Spock测试,但是我不知道如何在Spock测试中使用我的Controller(我之前从未编写过Spock测试)。您能否给我一个有关我的Mappers的简单例子,以便我了解测试的结构?
从控制器获取GetMapper:
@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);
}
我的userMapper:
@Mapper(componentModel = "spring", injectionStrategy = InjectionStrategy.CONSTRUCTOR)
public interface UserMapper {
@Mapping(target = "password", ignore = true)
UserResource mapToResource(User user);
UpdateResource mapToResourceUser(User user);
User mapToUserDomain(UserResource userResource);
}
我的Spock试用:
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
}
预先感谢
答案 0 :(得分:0)
userService只是一个模拟,jonJsonString是带有数据的对象,而Controller是userController。但是我解决了这个问题。我忘了要求正确的期望。因此,对于以下人员,这是Spock测试示例:
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
}