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

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

Post by Guest »

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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post