我 正在 使用 Spring Boot 、 MapStruct ( 1.5.3.Final ) 和 JUnit 。 我 想 将 一 个 Map 器 注入 到 一 个 服务 类 测试 中 。 我 不 想 stub 这个 Map 器 ( when ( .. ) . thenReturn ( ... ) ) 。
我 已经 尝试 了 很多 东西 , 并 阅读 了 多 个 帖子 Stackoverflow , 但 我 发现 任何 东西 。
- 我 的 Map 器 : * *
@Mapper(
componentModel = MappingConstants.ComponentModel.SPRING,
injectionStrategy = InjectionStrategy.CONSTRUCTOR
)
public interface ReservationMapper {
@Mapping(target = "id", ignore = true)
Reservation getReservationFrom(NewReservationSentByClient reservationData);
ExistingReservation getExistingReservationFrom(Reservation reservation);
}
中 的 每 一 个
- 使用 此 Map 器 的 服务 : * *
@Service
@RequiredArgsConstructor
@Slf4j
public class StandardReservationService implements ReservationService{
private final ReservationMapper reservationMapper;
...
格式
- 测试 类 * *
@RunWith(SpringRunner.class)
@SpringBootTest(classes={ReservationMapper.class})
public class StandardReservationServiceTest {
@MockBean
private ReservationRepository reservationRepositoryMock;
@Autowired
private ReservationMapper reservationMapperMock;
@MockBean
private ReservationRulesRepository reservationRulesRepositoryMock;
@Autowired
private StandardReservationService service;
@ParameterizedTest
@EnumSource(ReservationSource.class)
public void ...
格式
- pom . xml 文件 * *
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<!-- TESTS -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.17</source>
<target>1.17</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
格式
我 试探 着 :
- 在@SpringBootTest ( classes = {..} ) 中 传递 ReservationMapperImpl.class , 但 在 全新 安装 时 未 找到 此 实现
- 手动 示例 化 ReservationMapperImpl , 但 在 全新 安装 时 出现 相同 问题
- ... 等等
如果 可能 的 话 , 我 不 想 使用@SpringBootTest , 因为 我 正在 编写 单元 测试 , 所以 我 不 需要 上下文 .. 但 我 不 想 手动 创建 对象 Map 并 将 其 存根 。
1条答案
按热度按时间5lhxktic1#
你应该试试
并删除
@Autowired
注解。这应该会给予Map器的真实的实现。