java 经常使用測试框架

1. 经常使用单元化測试框架 junit4 , TestNG

能够通过注解 @Before @After @BeforeClass @AfterClass 分别作方法与类级的初始化与结束动作。


testNG演示样例:

public class TestngAnnotation {
  // test case 1
  @Test
  public void testCase1() {
      System.out.println("in test case 1");
  }
  // test case 2
  @Test
  public void testCase2() {
      System.out.println("in test case 2");
  }
  @BeforeMethod
  public void beforeMethod() {
      System.out.println("in beforeMethod");
  }
  @AfterMethod
  public void afterMethod() {
      System.out.println("in afterMethod");
  }
  @BeforeClass
  public void beforeClass() {
      System.out.println("in beforeClass");
  }
  @AfterClass
  public void afterClass() {
      System.out.println("in afterClass");
  }
  @BeforeTest
  public void beforeTest() {
      System.out.println("in beforeTest");
  }
  @AfterTest
  public void afterTest() {
      System.out.println("in afterTest");
  }
  @BeforeSuite
  public void beforeSuite() {
      System.out.println("in beforeSuite");
  }
  @AfterSuite
  public void afterSuite() {
      System.out.println("in afterSuite");
  }
}

其运行顺序为

in beforeSuite
in beforeTest
in beforeClass
in beforeMethod
in test case 1
in afterMethod
in beforeMethod
in test case 2
in afterMethod
in afterClass
in afterTest
in afterSuite

对于測试类较多时。能够指定需測试的类 使用打包測试

@RunWith(Suite.class) //指定suit測试运行器
@Suite.SuiteClasses({Junit4TimeoutTest.class,Junit4ExceptionTest.class})
public class Junit4SuiteTest {
}

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

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

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

Sample mockedSample = mock(Sample.class);//能够是接口或者是实现类
//验证交互
when(mockedSample.getName()).thenReturn("sample");
verify(mockSampleService, atMost(1)).getName(); // 验证方法之多调用了1次

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. client请求模拟

spring RestTemplate
RestTemplate 是用来在client訪问web服务的类。

    @Before
    public void init() {
        driver = new HtmlUnitDriver(); //IE
    }
    @Test
    public void loginCheck(){
        //全然装载页面后将控制返回给測试脚本
        driver.get("http://localhost/index.html"); 
        //element = driver.findElement(By.xpath( "//input[@id=’xxx’]" ));
        WebElement userName = driver.findElement(By.name("userName"));  
        WebElement password = driver.findElement(By.name("password"));
        //不论什么页面元素都能够调用sendKeys,
        userName.sendKeys("tom");     
        password.sendKeys("1234");  
        //提交表单
        driver.findElement(By.id( "loginBtn" )).click();
        //driver.findElement(By.id( "submit" )).submit(); 要求element必须在表单中。否则抛出NoSuchElementException
        //验证返回的主页面 main.jsp
        assertThat(driver.getTitle(), equalTo("this's title"));
        assertThat(driver.getPageSource(), containsString("tom"));
        WebElement body  = driver.findElement(By.xpath( "//body" ));
        assertThat(body.getText(), containsString("tom,welcome"));
    }

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

posted @ 2017-06-19 16:46  clnchanpin  阅读(330)  评论(0编辑  收藏  举报