java 常用测试框架

来源:互联网 发布:网络刷手被骗怎么追回 编辑:程序博客网 时间:2024/05/17 03:09

1. 常用单元化测试框架 junit4 , TestNG

可以通过注解 @Before @After @BeforeClass @AfterClass 分别作方法与类级的初始化与结束动作。 
testNG示例:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> TestngAnnotation {  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// test case 1</span>  @Test  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">testCase1</span>() {      System.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">out</span>.println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"in test case 1"</span>);  }  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// test case 2</span>  @Test  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">testCase2</span>() {      System.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">out</span>.println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"in test case 2"</span>);  }  @BeforeMethod  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">beforeMethod</span>() {      System.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">out</span>.println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"in beforeMethod"</span>);  }  @AfterMethod  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">afterMethod</span>() {      System.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">out</span>.println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"in afterMethod"</span>);  }  @BeforeClass  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">beforeClass</span>() {      System.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">out</span>.println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"in beforeClass"</span>);  }  @AfterClass  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">afterClass</span>() {      System.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">out</span>.println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"in afterClass"</span>);  }  @BeforeTest  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">beforeTest</span>() {      System.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">out</span>.println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"in beforeTest"</span>);  }  @AfterTest  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">afterTest</span>() {      System.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">out</span>.println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"in afterTest"</span>);  }  @BeforeSuite  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">beforeSuite</span>() {      System.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">out</span>.println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"in beforeSuite"</span>);  }  @AfterSuite  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">afterSuite</span>() {      System.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">out</span>.println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"in afterSuite"</span>);  }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li></ul>

其执行顺序为

<code class="hljs bash has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> beforeSuite<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> beforeTest<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> beforeClass<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> beforeMethod<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> test <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> afterMethod<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> beforeMethod<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> test <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> afterMethod<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> afterClass<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> afterTest<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> afterSuite</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li></ul>

对于测试类较多时,可以指定需测试的类 使用打包测试

<code class="hljs d has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@RunWith</span>(Suite.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//指定suit测试运行器</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@Suite</span>.SuiteClasses({Junit4TimeoutTest.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>,Junit4ExceptionTest.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>})<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> Junit4SuiteTest {}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

如此对 Junit4TimeoutTest 与 Junit4ExceptionTest 进行打包测试,无需一个个分别测试。

2. mockito 模拟对象,并做交互验证

mock 可以mock接口和实现类 
verify 验证过程是否被调用

<code class="hljs fsharp has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;">Sample mockedSample = mock(Sample.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//可以是接口或者是实现类</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//验证交互</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">when</span>(mockedSample.getName()).thenReturn(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"sample"</span>);verify(mockSampleService, atMost(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)).getName(); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 验证方法之多调用了1次</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

3. Unitils

可以通过模块化的配置,集成 spring, db (MYSQL , HIBERIATE) 以及 各种第三方测试框架(junit 4, testNG)

4. 测试web层

spring mock中 为一些依赖于容器的接口提供了模拟类,可以使用户在不启动容器的情况下 执行单元测试。 
org.springframework.mock.jndi 为jndi spi提供模拟类,摆脱对java ee容器的依赖 
org.springframework.mock.web 为servlet api接口提供模拟类(HttpServletRequest, ServletContext),脱离servlet容器测试

5. 客户端请求模拟

spring RestTemplate 
RestTemplate 是用来在客户端访问web服务的类。

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;">    @Before    public void init() {        driver = new HtmlUnitDriver()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; //IE</span>    }    @Test    public void loginCheck(){        //完全装载页面后将控制返回给测试脚本        driver<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.get</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"http://localhost/index.html"</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>        //element = driver<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.findElement</span>(By<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.xpath</span>( <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"//input[@id=’xxx’]"</span> ))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>        WebElement userName = driver<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.findElement</span>(By<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.name</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"userName"</span>))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;  </span>        WebElement password = driver<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.findElement</span>(By<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.name</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"password"</span>))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>        //任何页面元素都可以调用sendKeys,        userName<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.sendKeys</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"tom"</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;     </span>        password<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.sendKeys</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1234"</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;  </span>        //提交表单        driver<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.findElement</span>(By<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.id</span>( <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"loginBtn"</span> ))<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.click</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>        //driver<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.findElement</span>(By<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.id</span>( <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"submit"</span> ))<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.submit</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; 要求element必须在表单中,否则抛出NoSuchElementException</span>        //验证返回的主页面 main<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.jsp</span>        assertThat(driver<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.getTitle</span>(), equalTo(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"this's title"</span>))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>        assertThat(driver<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.getPageSource</span>(), containsString(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"tom"</span>))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>        WebElement body  = driver<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.findElement</span>(By<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.xpath</span>( <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"//body"</span> ))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>        assertThat(body<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.getText</span>(), containsString(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"tom,welcome"</span>))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li></ul>

上述示例引子spring3.x 企业应用

0 0
原创粉丝点击