Java PowerMock影响其他测试类中的测试
我正在使用PowerMock测试Java PowerMock影响其他测试类中的测试,java,junit,mockito,powermock,powermockito,Java,Junit,Mockito,Powermock,Powermockito,我正在使用PowerMock测试中断异常情况下的错误处理。不幸的是,这些测试有时似乎对其他测试类有一些副作用:我在一个测试类中配置的模拟在另一个测试类中似乎仍然有效。我把下面的例子精简到基本行,只是为了产生副作用 假设我们有一个类要测试: public class SomeClass { private void someMethod(Future<Document> future) { try { future.get(); } catch (Exc
中断异常情况下的错误处理。不幸的是,这些测试有时似乎对其他测试类有一些副作用:我在一个测试类中配置的模拟在另一个测试类中似乎仍然有效。我把下面的例子精简到基本行,只是为了产生副作用
假设我们有一个类要测试:
public class SomeClass {
private void someMethod(Future<Document> future) {
try {
future.get();
} catch (Exception e) {
Thread.currentThread().interrupt();
}
}
}
我立即得到以下异常:
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at de.mocktest.SimpleTest.shouldSleep(SimpleTest.java:9)
如果我再次在第一节课中删除mock,一切都会按预期进行
直到现在,我一直认为不同的测试类不应该相互影响。然而,在这个例子中,情况似乎是这样。这是我不知道的PowerMock的一些特性吗?如果是这样的话,有没有办法防止这种情况发生
Thread.currentThread().interrupt()
可能会阻止JUnit/PowerMock执行某种“清理”吗
我正在使用以下依赖项:
- JUnit 4.12
- 莫基托1.10.19
- PowerMock 1.6.3
您似乎是对的,因为第一个测试影响到第二个测试,如果它们是套件的一部分。看看,如果你在睡眠前调用中断,如果中断状态没有被清除,你会得到一个异常。中断状态
如果这些是单元测试,那么您需要模拟对Thread.currentThread().interrupt()的调用。实际上,调用中断会中断“单元测试”的“单元”部分。您正在设置中断标志,导致睡眠中断。这与模拟无关,因为此简单示例显示了相同的行为:
public class SimpleTest {
@Test
public void test1() {
Thread.currentThread().interrupt();
}
@Test
public void test2() throws InterruptedException {
Thread.sleep(100);
}
}
如果您的测试使用中断,您可能需要添加:
@Before
public void before() {
// clear the interrupted flag
Thread.interrupted();
}
到您的基本测试类。我无法在Java 8上重现这一点。您使用的是什么版本的Java?测试运行的顺序是什么(这真的不重要)?我使用的是Java1.8.0_60,这似乎只有在我运行PowerMock测试时才会发生。我也在使用maven来运行测试,但实际上我不知道这是否重要。你是对的,如果我将test1
放入它自己的类中,这也会产生相同的行为。
public class SimpleTest {
@Test
public void test1() {
Thread.currentThread().interrupt();
}
@Test
public void test2() throws InterruptedException {
Thread.sleep(100);
}
}
@Before
public void before() {
// clear the interrupted flag
Thread.interrupted();
}