我有这个jUnit测试类
public class TestRaavareBatch {
@Before
public void prep(){
try { new Connector(); }
catch (InstantiationException e) { e.printStackTrace(); }
catch (IllegalAccessException e) { e.printStackTrace(); }
catch (ClassNotFoundException e) { e.printStackTrace(); }
catch (SQLException e) { e.printStackTrace(); }
}
MySQLRaavareBatchDAO rvb = new MySQLRaavareBatchDAO();
@Test
public void testgetRaavareBatch() throws DALException{
RaavareBatchDTO rvbOBJ = rvb.getRaavareBatch(7);
assertEquals(7, rvbOBJ.getRaavareId());
assertEquals(100.0, rvbOBJ.getMaengde(),0.0);
assertEquals(7, rvbOBJ.getRbId());
}
@Test
public void testgetRaavareBatchList() throws DALException{
List<RaavareBatchDTO> rvbOBJ = rvb.getRaavareBatchList();
assertEquals(rvbOBJ.size(), 8);
}
@Test
public void testgetRaavareBatchListId() throws DALException{
List<RaavareBatchDTO> rvbOBJ = rvb.getRaavareBatchList(5);
assertEquals(rvbOBJ.size(), 2);
}
@Test
public void testcreateRaavareBatch() throws DALException{
RaavareBatchDTO test;
rvb.createRaavareBatch(test = new RaavareBatchDTO(8, 8, 200.0));
RaavareBatchDTO rvbOBJ = rvb.getRaavareBatch(8);
assertEquals(8, rvbOBJ.getRbId());
assertEquals(200.0, rvbOBJ.getMaengde(),0.0);
assertEquals(8, rvbOBJ.getRbId());
}
@Test
public void testupdateRaavareBatch() throws DALException{
RaavareBatchDTO test;
rvb.updateRaavareBatch(test = new RaavareBatchDTO(8, 7, 100.0));
RaavareBatchDTO rvbOBJ = rvb.getRaavareBatch(8);
assertEquals(7, rvbOBJ.getRaavareId());
assertEquals(100.0, rvbOBJ.getMaengde(),0.0);
}
}
它连接到一个包含7行的数据库,在我运行最后一个测试“updateRaavareBatch”后,我创建了一个新行,因此testgetRaavareBatchList()
中列表的大小将为8.但它给了我一个错误因为它在创建新行之前计算大小..
在创建新行并更新后,如何运行testgetRaavareBatchList()
。
答案 0 :(得分:3)
在测试数据库中的查询,插入和删除时,我曾经有类似的东西。
我结束了下面的内容,以确保测试独立性:
@Before
方法@After
@Test
注释的实用程序方法中以避免重复@Test
方法,并使用断言完成工作在另一个更难的情况下,我使用@BeforeClass
方法创建了一个嵌入式数据库,并在@AfterClass
中将其销毁
但你应该从不依赖测试订单。
答案 1 :(得分:1)
您可以在测试类上使用@FixedMethodOrder
注释。
一个简单的例子如下:
import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters;
//Running test cases in order of method names in ascending order
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class OrderedTestCasesExecution {
@Test
public void secondTest() {
System.out.println("Executing second test");
}
@Test
public void firstTest() {
System.out.println("Executing first test");
}
@Test
public void thirdTest() {
System.out.println("Executing third test");
}
}
Output:
Executing first test
Executing second test
Executing third test
但是关于您的特定测试场景只是一件事。在您的情况下,最好使用适当的@Before
和@After
方法来设置和回滚数据库测试。稍后,如果你的代码库足够大,你可能会遇到一个测试没有正确清理并使另一个随机测试用例失败的情况。
参考文献: