junitユニットがwebプロジェクトをテストする方法
4926 ワード
プロジェクト開発ではjunitユニットテストによって自分のメソッドロジックをテストすることが多い.以下では、junitがwebプロジェクトをテストする方法の手順を主に示します.サービス、dao層の方法、およびMockを用いてcotroller層を試験する方法を含む.以下のテスト例は、会社のプロジェクトに基づいて表示されるため、すべてのソースコードを貼り付けるのは不便です.
@ActiveProfiles("dev")プロジェクト開始環境を設定@ContextConfigurationプロファイルをロードしspringIOC注入完了
@Autowiredを使用してdao/serviceパッケージの下にあるオブジェクトを導入します.
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); wac == null
解析原因:ContextLoaderクラスはwebコンテナが起動したときにApplicationContextのコンテキストがロードされます.つまりwebを通じて.xmlファイルの
コードにbeanを取得するために
次のコードはcontrollerインタフェースをテストするために使用できます.postリクエストとgetリクエストの簡単なテストを示した.
junitテスト環境依存
junit
junit
4.1.1
org.springframework
spring-test
4.2.1
junitテストサービス、daoレイヤ
BaseTestクラスの紹介
@ActiveProfiles("dev")プロジェクト開始環境を設定@ContextConfigurationプロファイルをロードしspringIOC注入完了
@ActiveProfiles("dev")
@ContextConfiguration(locations = {
"classpath:applicationContext.xml"
})
public class BaseTest extends AbstractJUnit4SpringContextTests {
public T getBean(Class type){
return applicationContext.getBean(type);
}
public Object getBean(String beanName){
return applicationContext.getBean(beanName);
}
protected ApplicationContext getContext(){
return applicationContext;
}
}
特定のテストクラス
@Autowiredを使用してdao/serviceパッケージの下にあるオブジェクトを導入します.
public class DataMigrateScriptLogicTest extends BaseTest {
@Autowired
private DataMigrateScriptLogic dataMigrateScriptLogic;
@Test
public void test(){
dataMigrateScriptLogic.dataMigrateCommand();
}
}
問題にぶつかる
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); wac == null
解析原因:ContextLoaderクラスはwebコンテナが起動したときにApplicationContextのコンテキストがロードされます.つまりwebを通じて.xmlファイルの
org.springframework.web.context.ContextLoaderListener
クラスは、ApplicationContextのコンテキストを設定します.ただし、以上のjunitテスト構成ではコンテキストの設定を完了できません.public static WebApplicationContext getCurrentWebApplicationContext() {
ClassLoader ccl = Thread.currentThread().getContextClassLoader();
if (ccl != null) {
WebApplicationContext ccpt = currentContextPerThread.get(ccl);
if (ccpt != null) {
return ccpt;
}
}
return currentContext;
}
コードにbeanを取得するために
ContextLoader.getCurrentWebApplicationContext()
が使用されている場合は、試験例の起動時に以下のコードを設定すればよい.@Before
public void setApplication(){
MockServletContext sc = new MockServletContext("");
sc.addInitParameter(ContextLoader.CONFIG_LOCATION_PARAM, "/applicationContext.xml");
ServletContextListener listener = new ContextLoaderListener();
ServletContextEvent event = new ServletContextEvent(sc);
listener.contextInitialized(event);
}
junitテストcontrollerレイヤ
次のコードはcontrollerインタフェースをテストするために使用できます.postリクエストとgetリクエストの簡単なテストを示した.
@ActiveProfiles("dev")
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {"classpath:applicationContext.xml","classpath:servlet-context.xml"})
// ,
@Rollback
public class ReplenishControllerTest {
private MockMvc mockMvc;
@Autowired
WebApplicationContext webApplicationContext;
@Before
public void setUp(){
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void postTest(){
String url = "/replenish/replenishAuctionStatus";
Map