So injizieren Sie einen Mapper aus dem Mapstruct in einen @WebmockMVC -Integrationstest

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: So injizieren Sie einen Mapper aus dem Mapstruct in einen @WebmockMVC -Integrationstest

by Guest » 07 Feb 2025, 02:50

Ich versuche, einen Spring -Boot -Controller zu testen, der Controller hat eine UserService Abhängigkeit und der UserService hat eine UserMapper Abhängigkeit, der Code kompilt und läuft makellose, aber beim Versuch, es zu versuchen Führen Sie den folgenden Test aus. Ich erhalte einen Fehler: < /p>

Code: Select all

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userControllerImpl':
Unsatisfied dependency expressed through field 'userMapper': Error creating bean with name 'com.acneUserMapper':
Failed to instantiate [com.acne.user.UserMapper]: Specified class is an interface

< /code>
Test: < /p>
@WebMvcTest(UserController.class)
@Import(UserMapper.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@AutoConfigureWebMvc
public class UserControllerTests {
@Autowired
private MockMvc mockMvc;

@Test
public void shouldGetAuthenticatedUser() throws Exception {
this.mockMvc.perform(get("/api/users/me").with(oidcLogin())).andExpect(status().isOk());
}
}
< /code>
UsMapper: < /p>
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
public interface UserMapper {
public UserResponseDTO toUserResponseDTO(UserEntity userEntity);

public UserDTO toDto(UserEntity entity);

public UserEntity toEntity(UserDTO dto);
}
< /code>
UserController & Impl: < /p>
public interface UserController {

@GetMapping("/me")
public ResponseEntity getCurrentUser(Authentication authentication);
}
< /code>
@RestController
public class UserControllerImpl implements UserController {

@Autowired
UserMapper userMapper;

@Autowired
UserService userService;

@Override
public ResponseEntity getCurrentUser(Authentication currentUser) {
UserEntity loggedUser = userService.findByLoginOrError(currentUser.getName());
return ResponseEntity.ok(userMapper.toUserResponseDTO(loggedUser));
}
}
Wenn ich den Test-Import in @Import (UsMapperImpl.class) ändere Der Fehler ändert sich zu:

Code: Select all

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.acne.user.UserService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency a
nnotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Meine Frage lautet: Was kann ich tun, um den Controller zu testen und den Mapper korrekt injizieren?

Top