gpt4 book ai didi

java - 如何在具有多个测试的 JUnit 类中为特定测试运行tearDown 类型方法?

转载 作者:行者123 更新时间:2023-11-30 05:06:05 26 4
gpt4 key购买 nike

我有一个 junit testCase 类,其中包含多个测试方法(根据要求,我们不想为每个测试创建单独的类。)

我想为每个测试方法创建一个 tearDown 类型方法,它将专门为该测试运行。不适用于所有测试。

我的问题是,在许多测试中我在数据库中插入记录,测试它并在测试后删除它。但是,如果测试中途失败,控制不会到达最后,我的虚拟记录不会被删除。

我认为一个类只允许有一个tearDown(),并且这个tearDown()不知道我创建或插入了什么对象/记录以及要做什么删除!!!

我想仅为一个特定测试创建一个 tearDown()@After 方法。对于每个方法,类似于 Java 中的 finally{}

例如:

 public class TestDummy extends TestCase {

public void testSample1(){
InsertSomeData1();

assertFalse(true);
runTearDown1();
}

public void testSample2(){
InsertSomeData2();
assertFalse(true);
runTearDown2();

}

public void runTearDown1(){
deleteDummyDatafromTestSample1....
}

public void runTearDown2(){
deleteDummyDatafromTestSample2....
}

}

这里的控件永远不会转到 runTearDown1()runTearDown2() 并且我没有一个常见的 tearDown() 因为它不知道我插入了哪些数据以及特定于每种方法的数据。

最佳答案

看来您的测试依赖于固定的数据库,如果您当前的测试失败, future 的测试也会失败。我建议不要关注这个特定问题(为每个测试运行的特定于测试的tearDown 方法),而是关注你的主要问题 - borken 测试。在测试运行之前,它应该始终使用干净的数据库,并且每个测试都应该如此。现在,您的第一个测试与第二个测试有关系(通过数据库)。

正确的方法是在每次测试之前重新创建数据库,或者至少将其重置为基本状态。在这种情况下,您需要进行如下测试:

public class TestDummy {

// this code runs (once) when this test class is run.
@BeforeClass
public void setupDatabase() {
// code that creates the database schema
}

// this code runs after all tests in this class are run.
@AfterClass
public void teardownDatabase() {
// code that deletes your database, leaving no trace whatsoever.
}

// This code runs before each test case. Use it to, for example, purge the
// database and fill it with default data.
@Before
public void before() {

}

// You can use this method to delete all test data inserted by a test method too.
@After
public void after() {

}

// now for the tests themselves, we should be able to assume the database will
// always be in the correct state, independent from the previous or next test cases.
@Test
public void TestSample2() {
insertSomeData();
assertTrue(someData, isValid());
}
}

免责声明:JUnit 4 测试(使用注释)可能不是正确的注释,甚至可能不是正确的答案。

关于java - 如何在具有多个测试的 JUnit 类中为特定测试运行tearDown 类型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5046335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com