【问题标题】:How do you clear objects between JUnit/Maven tests?你如何清除 JUnit/Maven 测试之间的对象?
【发布时间】:2013-07-31 15:48:59
【问题描述】:

我正在测试微型搜索引擎的不同部分,一些 JUnit 测试在索引中留下了干扰其他测试的条目。 JUnit/Maven 中是否有用于在测试之间清除对象的约定?

【问题讨论】:

    标签: java unit-testing maven junit


    【解决方案1】:

    有 2 个特定的注释可以帮助您解决此问题,并且旨在用于您的情况:

    @After 定义必须在每个@Test 之后执行某个方法,而@AfterClass 是在整个测试类执行完毕后执行的方法。将后者视为最后一种清理方法,用于清除迄今为止您一直在使用并在测试之间共享的任何结构或记录。

    这是一个例子:

    @After
    public void cleanIndex() {
        index.clear(); //Assuming you have a collection
    }
    
    @AfterClass
    public void finalCleanup() {
        //Clean both the index and, for example, a database record.
    }
    

    注意:通过在 @Test 方法之前和开始执行 @Test 之前调用相关方法,它们的对应物(@Before@BeforeClass)正好相反s 在该类上定义。这是在以前版本的 JUnit 中使用的setUp


    如果不能使用注解,替代方法是使用旧的tearDown 方法:

    public void tearDown() {
        index.clear(); //Assuming you have a collection.
    }
    

    这是由 JUnit 框架提供的,其行为类似于使用 @After 注释的方法。

    【讨论】:

      【解决方案2】:

      您应该使用@Before 注释来保证每个测试都是从干净的状态运行的。请参阅:Test Fixtures

      【讨论】:

        【解决方案3】:

        在您的 junit 测试类中,您可以覆盖方法 setupteardownsetup 将在你的每一个测试之前运行,而teardown 将在你拥有的每一个 junit 测试之后运行。

        例如:

        public class JunitTest1 {
        
            private Collection collection;
        
            //Will initialize the collection for every test you run
            @Before
            public void setUp() {
                collection = new ArrayList();
                System.out.println("@Before - setUp");
            }
        
            //Will clean up the collection for every test you run
            @After
            public void tearDown() {
                collection.clear();
                System.out.println("@After - tearDown");
            }
        
            //Your tests go here
        }
        

        这对于清除测试之间的数据很有用,但也允许您不必在每个测试中重新初始化您的字段。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-16
          • 2018-08-06
          • 1970-01-01
          • 2013-07-31
          相关资源
          最近更新 更多