直接運行 junit測試用例的時候,輸出中文正常sql
用 eclipse-->run as --> maven test 就出現中文亂碼apache
maven-surefire-plugin是運行mvn test時執行測試的插件,eclipse
其有一個配置參數forkMode,默認爲once,即表示每次運行test時,新建一個JVM進程運行全部test.maven
這可能會致使亂碼問題.首先將forkMode設置爲never,即不新建.再運行mvn test,所有OK了.果真是這個問題!! 單元測試
因而再找官方參數說明,發現了argLine參數,這個參數與forkMode一塊兒使用,能夠設置新建JVM時的JVM啓動參數,測試
因而設置<argLine>-Dfile.encoding=UTF-8</argLine>,明確指定一下JVM的file.encoding,並將forkMode從never改回once,ui
仍是每次新建一個JVM進程.再次運行mvn test,一塊兒OK了,問題解決.編碼
究其緣由,是由於MAVEN的maven-surefire-plugin在新建JVM進程後,因爲沒有指定encoding,插件
採用了OS的默認編碼,致使讀取UTF-8文件(測試類的sql腳本文件)時出現亂碼code
部分 pom.xml 代碼
<build> <plugins> <!-- 解決maven test命令時console出現中文亂碼亂碼 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.7.2</version> <configuration> <forkMode>once</forkMode><!--默認,能夠不配置--> <argLine>-Dfile.encoding=UTF-8</argLine> <!-- <systemProperties> --> <!-- <property> --> <!-- <name>net.sourceforge.cobertura.datafile</name> --> <!-- <value>target/cobertura/cobertura.ser</value> --> <!-- </property> --> <!-- </systemProperties> --> </configuration> </plugin> </plugins> </build>
跳過單元測試
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <argLine>-Dfile.encoding=UTF-8</argLine> <skip>true</skip> </configuration> </plugin>