java - 我如何控制 jUnit 测试运行的顺序

标签 java junit

我有这个 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中回滚
  • 将一些插入内容放入私有(private)而非 @Test 带注释的实用方法中以避免重复
  • 当需要时,@Test 方法调用实用方法,并通过断言完成其工作

在另一个更困难的情况下,我在 @BeforeClass 方法中创建了一个嵌入式数据库,并在 @AfterClass 中销毁了它

但是您应该永远依赖测试订单。

关于java - 我如何控制 jUnit 测试运行的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30054554/

相关文章:

java - POI XSSF 读取所有列而不仅仅是所有定义的列 - 结果不是预期的

java - 为什么我会收到 org.hibernate.id.IdentifierGenerationException?

java - 出现错误 java.lang.NoClassDefFoundError : org/mockito/MockitoAnnotations$Mock

java - 如何更改 Maven2 中的 JUnit 转换

Java:使用 n 变量或使用硬编码数组元素之间是否存在性能差异?

java - Spring 验证请求正文作为字符串

junit - 在 Junit Mockito 中传递具有添加属性的对象

java - SLF4J:类路径包含多个 SLF4J 绑定(bind) slf4j-test 与 logback-classic

java - android 按顺序显示文件夹中的图像

java - 如何为本类(class)编写单元测试