2017-06-02 71 views
1

我使用的是MapStruct產生的一個映射:MapStruct映射器測試

@Mapper 
public interface CustomerMapper { 
    Customer mapBankCustomerToCustomer(BankCustomerData bankCustomer); 
} 

默認組件模型是春天。(在pom.xml中集)

<compilerArg>-Amapstruct.defaultComponentModel=spring</compilerArg> 

我有我在其中注入了客戶映射器,當我運行應用程序

@Autowired 
private CustomerMapper customerMapper; 

工作正常,但是當我運行單元測試,在服務volves @SpringBootTest

@SpringBootTest 
@AutoConfigureMockMvc 
@RunWith(SpringRunner.class) 
public class SomeControllerTest { 

    @Mock 
    private SomeDependency someDependency; 

    @InjectMocks 
    private SomeController someController; 

    @Test 
    public void shouldDoSomething() { 
     ... 
    } 

} 

我得到一個org.springframework.beans.factory.UnsatisfiedDependencyException

不滿意依賴通過現場表示 'customerMapper'

+0

粘貼行提出我的問題是儘快解決的問題是在調用的時候這種情況發生通過IDE,通過Maven或兩者測試? – Filip

+0

如果它只是IDE,我的猜測是_target/generated-sources_不會作爲IDE項目中的源文件夾添加。 – Gunnar

+0

我只使用IDE運行測試,但我確實將生成的源文件夾添加爲源文件夾,否則我的應用程序將無法運行。 – johncol

回答

0

當您通過運行測試IDE有兩種可能性:

  1. Eclipse或I ntelliJ正在拿起Annotation Processors,你需要正確設置它們。
  2. Eclipse或的IntelliJ不拿起從Maven的編譯器編譯器選項

要排除的可能性下每以下:

  1. 確保IDE配置爲運行APT。看看here如何設置它。從IDE運行構建並檢查是否存在生成的映射器類
  2. 如果它們最有可能使用默認組件模型生成。要解決這個問題,您有兩種選擇:
    1. 使用@Mapper(componentModel = "spring")。因爲你獨立於IDE,所以我個人更喜歡這個選項。您也可以使用可應用的@MapperConfig
    2. 使用註釋選項配置IDE。對於IntelliJ在設置 - >構建,執行,部署 - >編譯器 - >註釋處理器中添加編譯器參數,有一個名爲Annotation Processor Options的部分,其中添加mapstruct.defaultComponentModel作爲選項名稱,spring作爲值。我不知道如何做到這一點的Eclipse
0

我跟着這個answer和我在我的build.gradle文件