在JUnit测试中,AtomicInteger不会增加

Ben*_*aye 0 java junit increment atomicinteger

我有以下JUnit测试,并且无法解决为什么第二个测试没有通过,i两个测试中的值都是1.

public class TestTest {

  private AtomicInteger ai = new AtomicInteger(1);

  @Test
  public void test1() {
    int i = ai.getAndIncrement();
    Assert.assertEquals(1, i);
  }

  @Test
  public void test2() {
    int i = ai.getAndIncrement();
    Assert.assertEquals(2, i);
  }
}
Run Code Online (Sandbox Code Playgroud)

test1传递并test2失败,并显示以下消息:

java.lang.AssertionError: 
Expected :2
Actual   :1
Run Code Online (Sandbox Code Playgroud)

Kay*_*man 5

测试在新实例上运行.行为test1()不会test2()以任何方式影响,否则可能导致单个失败测试失败后所有其他测试失败.这将使得更难确定问题的根源,而你却不希望如此.

如果要测试多个调用之间的行为,则需要创建一个将这两个方法作为一个单元一起调用的测试,或者继续进行集成测试,以便测试大量代码以确保正常工作.

您的测试在逻辑上也是错误的,因为您正在递减该值.你的(错误的)预期价值将是0而不是2.