@DisabledIfSystemProperty()在afterEach或afterAll挂钩上不起作用

时间:2019-02-18 13:16:45

标签: conditional junit5

也许我误解了可以在何处使用条件注释,但是我试图仅在传入系统属性的情况下运行afterEach钩子或afterAll钩子。

例如:

select date '1899-12-31' + floor("jDate" / 1000) * interval '1' year + ( mod("jDate", 1000) - case when "tEnd" < 120000 and "dTeam" = 3 then 1 else 0 end ) * interval '1' day + floor("tStart" / 10000) * interval '1' hour + floor(mod("tStart", 10000) / 100) * interval '1' minute + mod("tStart", 100) * interval '1' second as "Start", date '1899-12-31' + floor("jDate" / 1000) * interval '1' year + ( mod("jDate", 1000) - case when "tEnd" < 120000 and "dTeam" = 3 then 1 else 0 end ) * interval '1' day + floor("tEnd" / 10000) * interval '1' hour + floor(mod("tEnd", 10000) / 100) * interval '1' minute + mod("tEnd", 100) * interval '1' second as "End", "IDPers" as "ID", "dTeam" as "Team" from "UnitsDay" where "jDate" > 118000 and "Dep" = 1; Start End ID Team ------------------- ------------------- ---------- ---------- 2018-09-30 00:00:00 2018-09-30 06:30:00 1 1 2018-09-30 16:00:00 2018-10-01 00:00:00 2 2 2018-09-29 00:00:00 2018-09-29 06:30:00 3 3 2018-09-30 12:00:00 2018-09-30 12:34:56 4 3 2018-09-30 22:00:00 2018-10-01 00:00:00 5 3 2018-09-30 00:00:00 2018-09-30 08:00:00 5 3

以及我的afterEach钩子:

with cte ("Start", "End", "ID", "Team") as (
    select
        date '1899-12-31'
            + floor("jDate" / 1000) * interval '1' year
            + mod("jDate", 1000) * interval '1' day
            + floor("tStart" / 10000) * interval '1' hour
            + floor(mod("tStart", 10000) / 100) * interval '1' minute
            + mod("tStart", 100) * interval '1' second,
        date '1899-12-31'
            + floor("jDate" / 1000) * interval '1' year
            + mod("jDate", 1000) * interval '1' day
            + floor("tEnd" / 10000) * interval '1' hour
            + floor(mod("tEnd", 10000) / 100) * interval '1' minute
            + mod("tEnd", 100) * interval '1' second,
        "IDPers",
        "dTeam"
    from "UnitsDay"
    where "jDate" > 118000
    and "Dep" = 1
)
select cte.*, "End" - "Start" as "Duration"
from cte;

Start               End                         ID       Team   Duration
------------------- ------------------- ---------- ---------- ----------
2018-09-30 00:00:00 2018-09-30 06:30:00          1          1 .270833333
2018-09-30 16:00:00 2018-10-01 00:00:00          2          2 .333333333
2018-09-30 00:00:00 2018-09-30 06:30:00          3          3 .270833333
2018-09-30 12:00:00 2018-09-30 12:34:56          4          3 .0242592593
2018-09-30 22:00:00 2018-10-01 00:00:00          5          3 .0833333333
2018-10-01 00:00:00 2018-10-01 08:00:00          5          3 .333333333

在上面的示例中,我希望不打印mvn test -DrunTearDownScript=false,但它是“ false”。

我想我可以在钩子中编写自己的条件,但是理想情况下使用批注看起来更简洁。

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

  

也许我误解了可以在其中使用条件注释的地方...

是的。它们只能用于“容器或(a)测试(方法)”上。

https://junit.org/junit5/docs/current/user-guide/#writing-tests-conditional-execution复制

  

JUnit Jupiter中的ExecutionCondition扩展API允许开发人员根据特定条件以编程方式启用或禁用容器或测试

     

[...]

     

以下各节中列出的每个条件注释只能在给定的测试接口,测试类或测试方法上声明一次。

     

[...]

     

2.7.3 系统属性条件

     

可以通过@EnabledIfSystemProperty和@DisabledIfSystemProperty批注基于命名的JVM系统属性的值来启用或禁用容器或测试。通过matchs属性提供的值将被解释为正则表达式。