gpt4 book ai didi

java - JUnit 测试单独成功,但一起执行时失败并导致错误?

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:30 24 4
gpt4 key购买 nike

我有三个 JUnit 测试,如下所示。如果单独执行这些测试,即注释掉其他两个测试并只执行一个测试,它们都会成功。

但是,如果我执行所有三个未注释的测试,则“testOrderDatabaseReturnsOrdersCorrectly”会产生错误,并且“testOrderDatabaseRemovesOrdersCorrectly”会失败。

我真的不明白为什么会发生这种情况。我在每次测试之前使用@Before进行设置,因此所有三个测试的条件应该相同?为什么其中一些在单独工作时表现良好却失败了?

@Before
public void setup()
{
sys = new OrderSystem();
sys.getDb().clearDb();
}


@Test
public void testOrderDatabaseAddsOrders()
{
sys.getDb().clearDb();
sys.createOrder(25);
assertEquals(sys.getDb().getDbArrayList().size(), 1);

sys.createOrder(30);
assertEquals(sys.getDb().getDbArrayList().size(), 2);

sys.createOrder(35);
assertEquals(sys.getDb().getDbArrayList().size(), 3);
}


@Test
public void testOrderDatabaseRemovesOrdersCorrectly()
{
sys.createOrder(25);
assertEquals(sys.getDb().getDbArrayList().size(), 1);
sys.removeOrder("BRICK1");
assertEquals(sys.getDb().getDbArrayList().size(), 0);
}

@Test
public void testOrderDatabaseReturnsOrdersCorrectly()
{
System.out.println("Size of db: " + sys.getDb().getDbArrayList().size());
sys.createOrder(25);
System.out.println("Size of db: " + sys.getDb().getDbArrayList().size());
BrickOrder o = sys.getOrder("BRICK1");
assertEquals(o.getNumberOfBricks(), 25);
}

最佳答案

However, if I execute all three tests uncommented then "testOrderDatabaseReturnsOrdersCorrectly" produces an error and "testOrderDatabaseRemovesOrdersCorrectly" fails.

您的问题很可能是当运行下一个测试方法时,其中一个测试方法的结果没有被清除,并且它们发生冲突。也许您正在使用像 H2 这样的内存数据库,即使您调用 sys.getDb().clearDb();,该数据库也没有被完全清除?

有几种方法可以验证这一点:

  • 首先将 System.out.println() 消息放入 setup() 中,以确保在每个方法之前调用它。
  • 在测试方法开始时,在数据库中进行查找,看看是否有结果来验证 clearDb() 做了什么。我怀疑您会发现它无法完全正常工作。
  • 更改测试方法以使用非重叠表格或使用非重叠数据来查看是否有效。例如,创建一个 int orderNumber 字段,并在每个测试方法中对其执行 ++ 以确保您使用的是新订单。当然,这是一种解决方法。最好理解为什么clear没有做你想做的事。

如何解决这个问题是一个更复杂的问题,取决于实际支持您的数据库的内容。也许您的 clearDb() 方法中存在一些错误。我提到 H2 是因为即使你设置了一个全新的数据库连接,旧的数据库连接也不会被破坏并且会被重用。如果它是 SQL 数据库,完全删除表并重新创建它们是一件事,甚至会迫使像 H2 这样的持久内存数据库清除其内容。

希望这有帮助。

关于java - JUnit 测试单独成功,但一起执行时失败并导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51216207/

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