2016-07-07 77 views
-1

我的源文件夾中有作爲bean公開的實用程序類。我想在我的junit 4編寫的測試類中使用其中的一些實用程序。例如,我有一個實用程序類,它具有將對象編組爲JSON字符串的方法。我想在我的測試類中注入這個實用程序bean。我無法使用Autowired註釋來注入這些bean。我應該將所有這些類複製到測試文件夾嗎?從測試文件夾中的src文件夾彈出豆子

編輯:

我想注入jsonUtil。下面是我的代碼的樣子。

import static org.junit.Assert.*; 

import java.math.BigDecimal; 

@RunWith(MockitoJUnitRunner.class) 
@SpringApplicationConfiguration(classes = ProxyApplicationMock.class) 
public class ProxyApplicationMock { 

    @Mock 
    public SoapClient soapClientMock; 

    private JsonUtil jsonUtil; 

主類

public class ProxyApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(ProxyApplication.class, args); 
    } 
} 
+0

你應該表現出例如你的測試類的代碼與Spring上下文配置,並告訴我們哪些你正在使用的Spring版本。 – Matt

+0

嗨馬特,添加了代碼,我使用的是Spring Boot。 –

+0

好的,看看我的回答,並告訴我是否有任何幫助。顯示你的Spring配置文件也會有所幫助:'ProxyApplicationMock' – Matt

回答

1

你的主要類可以通過你的測試類可以看到,但不是周圍的其他方式。所以不,你不需要複製它們。

如果您的實用程序類在您的測試Spring上下文配置(該類或XML文件 - 在@ContextConfiguration中聲明)中聲明爲Spring託管bean,該配置可能且可能應與您的主配置不同。

然後,您可以將它注入到任何Spring託管類中,如果它使用的是SpringJUnit4ClassRunner,那麼它將包含您的測試類。

編輯:

要總結一下我們在評論中討論的,主要的問題是,你的測試運行是不是SpringRunner(別名SpringJUnit4ClassRunner),因此JUnit是沒有運行在Spring上下文測試。看看a test example here

最簡單的測試用例將如下所示。

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class CityRepositoryIntegrationTests { 
    @Autowired 
    private MySpringBean springBean; 
    //... 
} 

但是,像Spring Boot一樣,經常會發生一些魔術。 @SpringBootTest是一個方便的註釋,它會自動檢測用@SpringBootConfiguration註解的類,這意味着如果您沒有爲您的測試配置特定的Spring配置,它將使用您的主要Spring配置,從而包含並實例化主應用程序的所有bean ,這通常不是我們想要的單元測試的原因,因爲我們希望通過嘲笑它的依賴性來獨立地測試一個類。

你可以做什麼,是提供你想在你的測試,包括Spring的compenent類,例如:

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = MySpringBean.class) 
public class CityRepositoryIntegrationTests { 
    @Autowired 
    private MySpringBean springBean; 

    @Mock 
    private MyMockedSpringBeanDependency mocked; 
    //... 
} 
+0

謝謝Matt。我正在使用傑克遜,但是我已經對我的util中的編組和解組部分進行了一些定製 –

相關問題