当前位置: 首页 > 面试题库 >

Junit @ Before / @ After叫什么顺序?

胡修伟
2023-03-14
问题内容

我有一个集成测试套件。我有一IntegrationTestBase门课可以扩展我的所有测试。该基类具有@Beforepublic void setUp())和@Afterpublic void tearDown()方法来建立API和数据库连接。我一直在做的只是在每个测试用例中覆盖这两个方法,并调用super.setUp()super.tearDown()。但是,如果有人忘记调用super或将它们放置在错误的位置并抛出异常,并且他们忘记在final或某物中调用super,则这可能会导致问题。

我想做的是在基类上创建setUptearDown方法final,然后仅添加我们自己的注释@Before@After方法。进行一些初始测试后,似乎总是按以下顺序调用:

Base @Before
Test @Before
Test
Test @After
Base @After

但我只是有点担心订单不能得到保证,并且可能导致问题。我环顾四周,没有看到任何关于此的内容。有谁知道我能做到而没有任何问题吗?

码:

public class IntegrationTestBase {

    @Before
    public final void setUp() { *always called 1st?* }

    @After
    public final void tearDown() { *always called last?* }
}


public class MyTest extends IntegrationTestBase {

    @Before
    public final void before() { *always called 2nd?* }

    @Test
    public void test() { *always called 3rd?* }

    @After
    public final void after() { *always called 4th?* }
}

问题答案:

是的,可以保证此行为:

@Before

@Before超级类的方法将在当前类的方法之前运行,除非它们在当前类中被覆盖。没有定义其他顺序。

@After

@After在超类中声明的方法将在当前类的方法之后运行,除非它们在当前类中被覆盖。



 类似资料:
  • 问题内容: 我相信大家都知道setUp(@Before)将在任何测试方法之前执行,而tearDown(@After)将在测试方法之后执行。 我们也知道Junit会为 每个测试方法 创建一个Test实例。 我的问题是,我们可以只将setUp方法的内容移至类Constructor并删除setUp方法吗?是否有任何特定理由保留setUp方法? 问题答案: 这篇(旧的)JUnit最佳实践文章将其描述如下:

  • Before and After 是 jQuery 插件,可以查看之前版本的图片,也可以覆盖掉当前的图片。 Before and After 使用一个拖拽处理条来让用户决定如何显示这两个图片。 在线演示

  • 本文向大家介绍聊聊Spring AOP @Before @Around @After等advice的执行顺序,包括了聊聊Spring AOP @Before @Around @After等advice的执行顺序的使用技巧和注意事项,需要的朋友参考一下 用过spring框架进行开发的人,多多少少会使用过它的AOP功能,都知道有@Before、@Around和@After等advice。 最近,为了实

  • 问题内容: 在以下情况下,为什么:after选择器需要content属性才能起作用? 请注意,直到您指定content属性,您才看不到伪元素: 为什么这是预期的功能?您可能会认为显示块将迫使该元素显示出来。奇怪的是,您实际上可以在Web调试器中看到样式。但是,它们不会显示在页面上。 问题答案: 以下是各种W3C规范和草案的参考: 选择器级别3 伪元素’:before’和’:after’可用于在元素

  • 问题内容: 我正在阅读一本关于线程/同步的简单示例,该书声称使用会允许在同一实例上调用一个线程来访问该方法。它确实按照承诺进行了序列化,但似乎在 下面的方法中创建的第三个数组的大约9/10倍于第二个数组。该代码是示例代码,显示了没有同步方法的问题。 这本书说明了两种方式来处理这个问题,他们是- 并且 很显然,这两种选择工作,因为,相对于原来的代码,括号内的字都像一致… [您好] [世界](大约90