Edu*_*nta 39 java integration-testing unit-testing
您如何自动化集成测试?我使用JUnit进行其中一些测试.这是解决方案之一还是完全错误的?你有什么建议?
Joh*_*all 44
我已经使用JUnit进行了大量的集成测试.当然,集成测试可能意味着许多不同的事情.对于更多系统级集成测试,我更喜欢让脚本从外部驱动我的测试过程.
这是一种适用于使用http和数据库的应用程序的方法,我想验证整个堆栈:
Hypersonic or H2的内存模式作为数据库更换(本最适合的ORM)@BeforeSuite或等效(再次:最简单的ORM)@Before 每次测试,清除数据库并用必要的数据初始化JWebUnit对Jetty执行HTTP请求这为您提供了集成测试,无需任何数据库或应用程序服务器设置即可运行,并且可以从http向下运行堆栈.由于它不依赖于外部资源,因此该测试在构建服务器上运行良好.
这里使用的一些代码:
@BeforeClass
public static void startServer() throws Exception {
System.setProperty("hibernate.hbm2ddl.auto", "create");
System.setProperty("hibernate.dialect", "...");
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setJdbcUrl("jdbc:hsqldb:mem:mytest");
new org.mortbay.jetty.plus.naming.Resource(
"jdbc/primaryDs", dataSource);
Server server = new Server(0);
WebAppContext webAppContext = new WebAppContext("src/main/webapp", "/");
server.addHandler(webAppContext);
server.start();
webServerPort = server.getConnectors()[0].getLocalPort();
}
// From JWebUnit
private WebTestCase tester = new WebTestCase();
@Before
public void createTestContext() {
tester.getTestContext().setBaseUrl("http://localhost:" + webServerPort + "/");
dao.deleteAll(dao.find(Product.class));
dao.flushChanges();
}
@Test
public void createNewProduct() throws Exception {
String productName = uniqueName("product");
int price = 54222;
tester.beginAt("/products/new.html");
tester.setTextField("productName", productName);
tester.setTextField("price", Integer.toString(price));
tester.submit("Create");
Collection<Product> products = dao.find(Product.class);
assertEquals(1, products.size());
Product product = products.iterator().next();
assertEquals(productName, product.getProductName());
assertEquals(price, product.getPrice());
}
Run Code Online (Sandbox Code Playgroud)
对于那些想要了解更多信息的人,我在Java.net上写了一篇关于Jetty和JWebUnit的嵌入式集成测试的文章.
Rob*_*bin 17
JUnit有效.没有限制将其限制为仅进行单元测试.我们使用JUnit,Maven和CruiseControl来进行CI.
可能存在特定于集成测试的工具,但我认为它们的有用性取决于您正在集成的系统组件类型.JUnit适用于非UI类型测试.
当使用Maven构建项目时,我对TestNG有了更多的运气,因为它具有@BeforeSuite和@AfterSuite操作.这是有用的,因为如果任何集成测试失败,Maven将不会执行'post-integration-test`.Ant没有问题,所以我只是偏爱使用jUnit.
在任何一种情况下,将测试分割为TestNG和jUnit都有助于集成测试.
| 归档时间: |
|
| 查看次数: |
38376 次 |
| 最近记录: |