@Order 注释被忽略

问题描述 投票:0回答:1

我正在测试我们自己的库,它使用 JDBC。对于指定的数据库名称,代码需要查找值

javax.sql.DataSource
,使用
DataSource.getConnection()
连接,然后运行一些 SQL 语句。

如果环境中存在

$TESTDB
,我希望跳过所有测试。我还想单独测试这些初始步骤——例如,如果找到
dataSource
失败,则跳过其余步骤。

目前测试代码为:

    public static final String DBNAME = System.getenv("TESTDB");

    private static DataSource DS = null;
    private static Connection CONN = null;

    @BeforeAll
    public static void checkEnvironment() {
        assumeTrue(DBNAME != null, "Environment variable DBNAME");
        logger.info("DBNAME is {}", DBNAME);
    }

    @Test
    @Order(20)
    public void getDataSource() {
        DS = DatasourceFactory.getDataSourceByKey(DBNAME);
        assertNotNull(DS, "Failed to find details for datasource " +
            DBNAME);

        logger.info("Datasource for {}: {}", DBNAME, DS);
    }

    @Test
    @Order(30)
    public void getConnection() {
        try {
            CONN = DS.getConnection();
        } catch (SQLException e) {
            fail("Connetion to " + DBNAME + " failed", e);
        }
    }

@BeforeAll
注释似乎工作正常——首先调用该方法,并记录从环境变量获取的 DBNAME。如果未设置环境变量,则按照我的意愿跳过所有测试。

我的问题是,尽管有明确的

@Order
注释,但在
getConnection()
测试有机会设置静态
getDataSource()
之前尝试进行
DS
测试。
getDataSource()
本身成功了——稍后,记录如下内容:

Datasource for SQL_DEV4: org.apache.commons.dbcp.BasicDataSource@4a3668

但是

getConnection()
由于空指针异常而失败,因为在尝试时
DS
仍然是
null

为什么我的订单不起作用?

java junit junit5
1个回答
0
投票

你可能错过了:

@TestMethodOrder(OrderAnnotation.class)

在班级级别定义。

© www.soinside.com 2019 - 2024. All rights reserved.