这篇博客,我们将提供一个使用TestNG测试spring组件的实例,需要的工具如下:
- TestNG 6.8.7
- Spring 3.2.2.RELEASE
- Maven 3
- Eclipse IDE
1. 项目依赖
需要spring-test.jar,pom.xml如下:
pom.xml
<code class=" language-markup" style="padding: 0px; line-height: 1.5; font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace; word-spacing: normal; -ms-word-break: normal; -ms-word-wrap: normal;"><span style="background-color: rgb(247, 247, 249);"><span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>properties</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>spring.version</span><span class="token punctuation" style="color:#999999;">></span></span>3.2.2.RELEASE<span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>spring.version</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>testng.version</span><span class="token punctuation" style="color:#999999;">></span></span>6.8.7<span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>testng.version</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>properties</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>dependencies</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>dependency</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>groupId</span><span class="token punctuation" style="color:#999999;">></span></span>org.springframework<span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>groupId</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>artifactId</span><span class="token punctuation" style="color:#999999;">></span></span>spring-core<span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>artifactId</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>version</span><span class="token punctuation" style="color:#999999;">></span></span>${spring.version}<span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>version</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>dependency</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>dependency</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>groupId</span><span class="token punctuation" style="color:#999999;">></span></span>org.springframework<span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>groupId</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>artifactId</span><span class="token punctuation" style="color:#999999;">></span></span>spring-test<span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>artifactId</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>version</span><span class="token punctuation" style="color:#999999;">></span></span>${spring.version}<span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>version</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>dependency</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>dependency</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>groupId</span><span class="token punctuation" style="color:#999999;">></span></span>org.testng<span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>groupId</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>artifactId</span><span class="token punctuation" style="color:#999999;">></span></span>testng<span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>artifactId</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>version</span><span class="token punctuation" style="color:#999999;">></span></span>${testng.version}<span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>version</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>scope</span><span class="token punctuation" style="color:#999999;">></span></span>test<span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>scope</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>dependency</span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>dependencies</span><span class="token punctuation" style="color:#999999;">></span></span></span></code>
2. Spring 组件
创建一个简单的spring组件,之后我们使用TestN个测试该组件。
EmailGenerator.java
<code class=" language-java" style="padding: 0px; line-height: 1.5; font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace; word-spacing: normal; -ms-word-break: normal; -ms-word-wrap: normal;"><span style="background-color: rgb(247, 247, 249);"><span class="token keyword" style="color:#077aa;">package</span> com<span class="token punctuation" style="color:#999999;">.</span>mkyong<span class="token punctuation" style="color:#999999;">.</span>testng<span class="token punctuation" style="color:#999999;">.</span>project<span class="token punctuation" style="color:#999999;">.</span>service<span class="token punctuation" style="color:#999999;">.</span>email<span class="token punctuation" style="color:#999999;">;</span>
<span class="token keyword" style="color:#077aa;">public</span> <span class="token keyword" style="color:#077aa;">interface</span> <span class="token class-name">EmailGenerator</span> <span class="token punctuation" style="color:#999999;">{</span>
String <span class="token function" style="color:#dd4a68;">generate</span><span class="token punctuation" style="color:#999999;">(</span><span class="token punctuation" style="color:#999999;">)</span><span class="token punctuation" style="color:#999999;">;</span>
<span class="token punctuation" style="color:#999999;">}</span></span></code>
RandomEmailGenerator.java
<code class=" language-java" style="padding: 0px; line-height: 1.5; font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace; word-spacing: normal; -ms-word-break: normal; -ms-word-wrap: normal;"><span style="background-color: rgb(247, 247, 249);"><span class="token keyword" style="color:#077aa;">package</span> com<span class="token punctuation" style="color:#999999;">.</span>mkyong<span class="token punctuation" style="color:#999999;">.</span>testng<span class="token punctuation" style="color:#999999;">.</span>project<span class="token punctuation" style="color:#999999;">.</span>service<span class="token punctuation" style="color:#999999;">.</span>email<span class="token punctuation" style="color:#999999;">;</span>
<span class="token keyword" style="color:#077aa;">import</span> org<span class="token punctuation" style="color:#999999;">.</span>springframework<span class="token punctuation" style="color:#999999;">.</span>stereotype<span class="token punctuation" style="color:#999999;">.</span>Service<span class="token punctuation" style="color:#999999;">;</span>
<span class="token annotation punctuation" style="color:#999999;">@Service</span>
<span class="token keyword" style="color:#077aa;">public</span> <span class="token keyword" style="color:#077aa;">class</span> <span class="token class-name">RandomEmailGenerator</span> <span class="token keyword" style="color:#077aa;">implements</span> <span class="token class-name">EmailGenerator</span> <span class="token punctuation" style="color:#999999;">{</span>
<span class="token annotation punctuation" style="color:#999999;">@Override</span>
<span class="token keyword" style="color:#077aa;">public</span> String <span class="token function" style="color:#dd4a68;">generate</span><span class="token punctuation" style="color:#999999;">(</span><span class="token punctuation" style="color:#999999;">)</span> <span class="token punctuation" style="color:#999999;">{</span>
<span class="token keyword" style="color:#077aa;">return</span> <span class="token string" style="color:#66990;">"feedback@yoursite.com"</span><span class="token punctuation" style="color:#999999;">;</span>
<span class="token punctuation" style="color:#999999;">}</span>
<span class="token punctuation" style="color:#999999;">}</span></span></code>
3. TestNG + Spring
在测试包下创建一个测试的配置文件spring-test-config.xml,如下:
${project}/src/test/resources/spring-test-config.xml
<code class=" language-markup" style="padding: 0px; line-height: 1.5; font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace; word-spacing: normal; -ms-word-break: normal; -ms-word-wrap: normal;"><span style="background-color: rgb(247, 247, 249);"><span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span>beans</span> <span class="token attr-name" style="color:#66990;">xmlns</span><span class="token attr-value" style="color:#077aa;"><span class="token punctuation" style="color:#999999;">=</span><span class="token punctuation" style="color:#999999;">"</span>http://www.springframework.org/schema/beans<span class="token punctuation" style="color:#999999;">"</span></span> <span class="token attr-name" style="color:#66990;"><span class="token namespace">xmlns:</span>context</span><span class="token attr-value" style="color:#077aa;"><span class="token punctuation" style="color:#999999;">=</span><span class="token punctuation" style="color:#999999;">"</span>http://www.springframework.org/schema/context<span class="token punctuation" style="color:#999999;">"</span></span> <span class="token attr-name" style="color:#66990;"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value" style="color:#077aa;"><span class="token punctuation" style="color:#999999;">=</span><span class="token punctuation" style="color:#999999;">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation" style="color:#999999;">"</span></span> <span class="token attr-name" style="color:#66990;"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value" style="color:#077aa;"><span class="token punctuation" style="color:#999999;">=</span><span class="token punctuation" style="color:#999999;">"</span> http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd <span class="token punctuation" style="color:#999999;">"</span></span><span class="token punctuation" style="color:#999999;">></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"><</span><span class="token namespace">context:</span>component-scan</span> <span class="token attr-name" style="color:#66990;">base-package</span><span class="token attr-value" style="color:#077aa;"><span class="token punctuation" style="color:#999999;">=</span><span class="token punctuation" style="color:#999999;">"</span>com.mkyong.testng<span class="token punctuation" style="color:#999999;">"</span></span> <span class="token punctuation" style="color:#999999;">/></span></span> <span class="token tag" style="color:#99055;"><span class="token tag"><span class="token punctuation" style="color:#999999;"></</span>beans</span><span class="token punctuation" style="color:#999999;">></span></span></span></code>
测试用例需要继承 AbstractTestNGSpringContextTests
, 如下示例 :
${project}/src/test/java/com/mkyong/testng/examples/spring/TestSpring.java
<code class=" language-java" style="padding: 0px; line-height: 1.5; font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace; word-spacing: normal; -ms-word-break: normal; -ms-word-wrap: normal;"><span style="background-color: rgb(247, 247, 249);"><span class="token keyword" style="color:#077aa;">package</span> com<span class="token punctuation" style="color:#999999;">.</span>mkyong<span class="token punctuation" style="color:#999999;">.</span>testng<span class="token punctuation" style="color:#999999;">.</span>examples<span class="token punctuation" style="color:#999999;">.</span>spring<span class="token punctuation" style="color:#999999;">;</span>
<span class="token keyword" style="color:#077aa;">import</span> org<span class="token punctuation" style="color:#999999;">.</span>springframework<span class="token punctuation" style="color:#999999;">.</span>beans<span class="token punctuation" style="color:#999999;">.</span>factory<span class="token punctuation" style="color:#999999;">.</span>annotation<span class="token punctuation" style="color:#999999;">.</span>Autowired<span class="token punctuation" style="color:#999999;">;</span>
<span class="token keyword" style="color:#077aa;">import</span> org<span class="token punctuation" style="color:#999999;">.</span>springframework<span class="token punctuation" style="color:#999999;">.</span>test<span class="token punctuation" style="color:#999999;">.</span>context<span class="token punctuation" style="color:#999999;">.</span>ContextConfiguration<span class="token punctuation" style="color:#999999;">;</span>
<span class="token keyword" style="color:#077aa;">import</span> org<span class="token punctuation" style="color:#999999;">.</span>springframework<span class="token punctuation" style="color:#999999;">.</span>test<span class="token punctuation" style="color:#999999;">.</span>context<span class="token punctuation" style="color:#999999;">.</span>testng<span class="token punctuation" style="color:#999999;">.</span>AbstractTestNGSpringContextTests<span class="token punctuation" style="color:#999999;">;</span>
<span class="token keyword" style="color:#077aa;">import</span> org<span class="token punctuation" style="color:#999999;">.</span>testng<span class="token punctuation" style="color:#999999;">.</span>Assert<span class="token punctuation" style="color:#999999;">;</span>
<span class="token keyword" style="color:#077aa;">import</span> org<span class="token punctuation" style="color:#999999;">.</span>testng<span class="token punctuation" style="color:#999999;">.</span>annotations<span class="token punctuation" style="color:#999999;">.</span>Test<span class="token punctuation" style="color:#999999;">;</span>
<span class="token keyword" style="color:#077aa;">import</span> com<span class="token punctuation" style="color:#999999;">.</span>mkyong<span class="token punctuation" style="color:#999999;">.</span>testng<span class="token punctuation" style="color:#999999;">.</span>project<span class="token punctuation" style="color:#999999;">.</span>service<span class="token punctuation" style="color:#999999;">.</span>email<span class="token punctuation" style="color:#999999;">.</span>EmailGenerator<span class="token punctuation" style="color:#999999;">;</span>
<span class="token annotation punctuation" style="color:#999999;">@Test</span>
<span class="token annotation punctuation" style="color:#999999;">@ContextConfiguration</span><span class="token punctuation" style="color:#999999;">(</span>locations <span class="token operator" style="color:#a67f59;">=</span> <span class="token punctuation" style="color:#999999;">{</span> <span class="token string" style="color:#66990;">"classpath:spring-test-config.xml"</span> <span class="token punctuation" style="color:#999999;">}</span><span class="token punctuation" style="color:#999999;">)</span>
<span class="token keyword" style="color:#077aa;">public</span> <span class="token keyword" style="color:#077aa;">class</span> <span class="token class-name">TestSpring</span> <span class="token keyword" style="color:#077aa;">extends</span> <span class="token class-name">AbstractTestNGSpringContextTests</span> <span class="token punctuation" style="color:#999999;">{</span>
<span class="token annotation punctuation" style="color:#999999;">@Autowired</span>
EmailGenerator emailGenerator<span class="token punctuation" style="color:#999999;">;</span>
<span class="token annotation punctuation" style="color:#999999;">@Test</span><span class="token punctuation" style="color:#999999;">(</span><span class="token punctuation" style="color:#999999;">)</span>
<span class="token keyword" style="color:#077aa;">void</span> <span class="token function" style="color:#dd4a68;">testEmailGenerator</span><span class="token punctuation" style="color:#999999;">(</span><span class="token punctuation" style="color:#999999;">)</span> <span class="token punctuation" style="color:#999999;">{</span>
String email <span class="token operator" style="color:#a67f59;">=</span> emailGenerator<span class="token punctuation" style="color:#999999;">.</span><span class="token function" style="color:#dd4a68;">generate</span><span class="token punctuation" style="color:#999999;">(</span><span class="token punctuation" style="color:#999999;">)</span><span class="token punctuation" style="color:#999999;">;</span>
System<span class="token punctuation" style="color:#999999;">.</span>out<span class="token punctuation" style="color:#999999;">.</span><span class="token function" style="color:#dd4a68;">println</span><span class="token punctuation" style="color:#999999;">(</span>email<span class="token punctuation" style="color:#999999;">)</span><span class="token punctuation" style="color:#999999;">;</span>
Assert<span class="token punctuation" style="color:#999999;">.</span><span class="token function" style="color:#dd4a68;">assertNotNull</span><span class="token punctuation" style="color:#999999;">(</span>email<span class="token punctuation" style="color:#999999;">)</span><span class="token punctuation" style="color:#999999;">;</span>
Assert<span class="token punctuation" style="color:#999999;">.</span><span class="token function" style="color:#dd4a68;">assertEquals</span><span class="token punctuation" style="color:#999999;">(</span>email<span class="token punctuation" style="color:#999999;">,</span> <span class="token string" style="color:#66990;">"feedback@yoursite.com"</span><span class="token punctuation" style="color:#999999;">)</span><span class="token punctuation" style="color:#999999;">;</span>
<span class="token punctuation" style="color:#999999;">}</span>
<span class="token punctuation" style="color:#999999;">}</span></span></code>
输出:
<code class=" language-bash" style="padding: 0px; line-height: 1.5; font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace; word-spacing: normal; -ms-word-break: normal; -ms-word-wrap: normal;"><span style="background-color: rgb(247, 247, 249);">feedback@yoursite.com PASSED: testEmailGenerator <span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">=</span> Default <span class="token function" style="color:#dd4a68;">test</span> Tests run: 1, Failures: 0, Skips: 0 <span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">==</span><span class="token operator" style="color:#a67f59;">=</span></span></code>