我有这个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()
。
我曾经在数据库中测试查询,插入和删除时都有类似的东西。
我以以下下文结束,以确保测试独立性:
- 在
@Before
方法中准备数据库连接 -
@After
中的回滚 - 将一些插入物放入私有的
@Test
带注释的实用方法避免重复的方法 - 在需要时,
@Test
方法称为实用程序方法,并在断言中完成了工作
在另一种困难的情况下,我在@BeforeClass
方法中创建了一个嵌入式数据库,并在@AfterClass
但是您应该永远不要依靠测试顺序。
您可以在测试类上使用@FixedMethodOrder
注释。
一个简单的例子是:
导入org.junit.fixmethodorder;导入org.junit.test;导入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
方法来设置和回滚数据库测试。稍后,如果您的代码库足够大,您可能会遇到一个测试未正确清理并使另一个随机测试柜失败的情况。
参考:
简单的测试柜源
@fixmethodorder的junit javadoc
Junit上的另一个不错的页面