Tapestry5单元测试

我们另一个方面可以测试模板文件,模板文件就是HTML文件,在HTML文件中可能涉及到测试:
*页面字段显示测试
*测试link动作
*测试表单提交form

1. 页面字段显示测试
在我们第1章的Start模板主要是断言显示“Hello World!”字符串。测试程序如清单2.5所示。

  
  
  
  
  1. package com.kingbegin.web.pages; 
  2.  
  3. import org.apache.tapestry.dom.Document; 
  4. import org.apache.tapestry.test.PageTester; 
  5. import org.junit.Assert; 
  6. import org.junit.Before; 
  7. import org.junit.Test; 
  8.  
  9. public class StartTemplateTest { 
  10.  
  11.     PageTester tester; 
  12.     Document doc; 
  13.  
  14.     @Before 
  15.     public void setUp() throws Exception { 
  16.  
  17.         String appPackage = "com.kingbegin.web"
  18.         String appName = "App"// IoC中Modeule名字,默认AppModule.java。 
  19.         tester = new PageTester(appPackage, appName, "WebRoot"); 
  20.         doc = tester.renderPage("Start"); 
  21.     } 
  22.  
  23.     @Test 
  24.     public void testGetMessage() { 
  25.         String message = doc.getElementById("label1").getChildMarkup().trim(); 
  26.         Assert.assertEquals(message, "Hello World!"); 
  27.     } 
  28.  

 
PageTester对象是一个测试辅助类,实例化PageTester对象需要三个参数:appPackage是应用程序的基本包、appName是IoC容器的Modeule名字默认AppModule.java,我们的案例中没有Modeule,所以它的默认App、"WebRoot"是模板文件所在的位置。renderPage方法是模拟呈现页面得到一个Document对象,XHTML文件可以看成是一个XML文档,Document对象就是整个的页面,Document的getElementById("label1")方法可以帮助我们获得id为"label1"的Element对象,再调用getChildMarkup()可以获得元素中的内容,因为返回的内容可能还有回车和空格,所以还要调用trim()方法。最后断言label1中的内容为"HelloWorld!"。

  
  
  
  
  1. tapestry-test-5.0.11.jar 
  2.  
  3. If the page requires a context, you can pass it this way: 
  4. public class MyTest extends Assert 
  5.     @Test 
  6.     public void test1() 
  7.     { 
  8.         String appPackage = "org.example.app"
  9.         String appName = "LocaleApp"
  10.         PageTester tester = new PageTester(appPackage, appName, "src/main/webapp"); 
  11.         Object[] context = new Object[]{ "abc"123 }; 
  12.         Document doc = tester.invoke(new ComponentInvocation(new PageLinkTarget("MyPage"), context)); 
  13.         assertEquals(doc.getElementById("id1").getChildText(), "hello"); 
  14.     } 



http://tapestry.apache.org/tapestry5/tapestry-core/guide/unit-testing-pages.html
Testing an action link
After rendering a page, you may want to "click" on an action link and then assert against the resulting page. You can do it this way:

  
  
  
  
  1. public class MyTest extends Assert 
  2.     @Test 
  3.     public void test1() 
  4.     { 
  5.         String appPackage = "org.example.app"
  6.         String appName = "LocaleApp"
  7.         PageTester tester = new PageTester(appPackage, appName, "src/main/webapp"); 
  8.         Document doc = tester.renderPage("MyPage"); 
  9.         Element link = doc.getElementById("link1"); 
  10.         doc = tester.clickLink(link); 
  11.         assertTrue(doc.toString().contains("abc")); 
  12.     } 

Testing a form submission
After rendering a page, you may want to fill out a form, submit it and then inspect the resulting page. You can do it this way:

  
  
  
  
  1. public class MyTest extends Assert 
  2.     @Test 
  3.     public void test1() 
  4.     { 
  5.         String appPackage = "org.example.app"
  6.         String appName = "LocaleApp"
  7.         PageTester tester = new PageTester(appPackage, appName, "src/main/webapp"); 
  8.         Document doc = tester.renderPage("MyPage"); 
  9.         Element form = doc.getElementById("form1"); 
  10.         Map<String, String> fieldValues = new HashMap<String, String>(); 
  11.         fieldValues.put("field1""hello"); 
  12.         fieldValues.put("field2""100"); 
  13.         doc = tester.submitForm(form, fieldValues); 
  14.         assertTrue(doc.toString().contains("abc")); 
  15.     } 


To submit a form by clicking a submit button, call the clickSubmit() method instead.
Unit testing a component
To unit test a component, just create a test page containing that component. Then unit test that page.

你可能感兴趣的:(职场,休闲,Tapestry5)