【发布时间】:2018-07-06 18:52:35
【问题描述】:
我有三个 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);
}
【问题讨论】:
-
sys是否声明为static? -
声明的静态在哪里? @rgettman
-
如果你的意思是在测试类中,不,它只是声明
private OrderSystem sys -
发布足够的代码来重现问题。
-
错误是什么?