簡體   English   中英

MapStruct Mapper 在單元測試中總是 null

[英]MapStruct Mapper always null in Unit tests

我嘗試了在 Stackoverflow 上找到的不同方法。 這就是我知道如何將映射器與 MapStruct 一起使用的方式。 我有一個像這樣的映射器 class :

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface DummyMapper {
    DummyMapper INSTANCE = Mappers.getMapper(DummyMapper.class);
    DummyResponseApi modelToApi(DummyResponse DummyResponseModel);
}

還有我的單元測試:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {DummyMapper.class})
class ServiceClassTest {
   private DummyService service;
}

我要測試的服務方法:

public DummyModelApi getSomething() {
   DummyModel mapMe = new DummyModel();
   return DummyMapper.INSTANCE.modelToApi(mapMe);
}

在較舊的項目中,我以同樣的方式這樣做並且沒有任何問題。 現在我在一個帶有 Spring Boot 2.5.6 和 MapStruct 1.5.0.Beta1 的新項目中使用它。

使用@SpringBootTest,據我所知,Spring 實際上正在啟動應用程序,應該創建映射器 class,所以我不明白,為什么映射器總是 Z37A6259CC0C1DAE299A7866489DFFBD0。 當我在@SpringBootTest 中刪除 DummyMapper,class 時。 “無法加載應用程序上下文”出現錯誤,這告訴我。 映射器被識別。

我覺得奇怪的另一件事是,我必須在我的映射器中使用“unmappedTargetPolicy = ReportingPolicy.IGNORE”,否則我會收到錯誤消息“找不到未映射的屬性”或其他東西,即使確實有同名的屬性在這兩個模型中。 這在舊項目中總是沒問題的,不知道為什么 MapStruct 現在正在做奇怪的事情。

天哪,我找到了解決方案。 現在我知道為什么我必須在我的映射器中添加“@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)”。

在這里找到解決方案: https://stackoverflow.com/a/69649688/8743351

Lombok 需要在 pom.xml/gradle.build 中的 mapstruct 之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM