我正在测试一个微型搜索引擎的不同部分,一些 JUnit 测试在索引中留下了干扰其他测试的条目。JUnit/Maven 中是否有用于在测试之间清除对象的约定?
问问题
5782 次
3 回答
2
有 2 个特定的注释可以帮助您解决此问题,并且旨在用于您的情况:
@After
定义必须在 every 之后执行某个方法@Test
,while@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.
}
注意:通过在方法之前和开始执行在该类上定义的 s之前调用相关方法,它们的对应物 (@Before
和) 正好相反。这是在以前版本的 JUnit 中使用的。@BeforeClass
@Test
@Test
setUp
如果您不能使用注释,则另一种方法是使用良好的旧tearDown
方法:
public void tearDown() {
index.clear(); //Assuming you have a collection.
}
这是由 JUnit 框架提供的,其行为类似于使用@After
.
于 2013-07-31T15:59:08.930 回答
1
您应该使用 @Before 注释来保证每个测试都是从干净的状态运行的。请参阅:测试夹具。
于 2013-07-31T15:58:49.480 回答
1
在您的 junit 测试类中,您可以覆盖方法setup
和teardown
. setup
将在您的每个测试之前运行,而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
}
这对于清除测试之间的数据很有用,但也允许您不必在每个测试中重新初始化您的字段。
于 2013-07-31T16:00:36.147 回答