У меня есть следующий тестовый класс:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Foo.class)
public class MyTestClass {
@BeforeClass
public static void setUpBeforeClass() {
// class Foo: singleton pattern
Foo mockFoo = Mockito.mock(Foo.class);
when(mockFoo.theMethod()).thenReturn(...);
PowerMockito.mockStatic(Foo.class);
PowerMockito.when(Foo.getInstance()).thenReturn(mockFoo);
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
@AfterClass
public static void tearDownAfterClass() {
}
// MyClass.myStaticMethod() calls to some point Foo.getInstance().theMethod()
// when the MyTestClass in executed as JUnit in Eclipse this test passes
// when this test
@Test
public void test1() {
MyClass.myStaticMethod(myargs);
}
// when the MyTestClass in executed as JUnit in Eclipse this test fails because Foo.getInstance() returns null
// but this test passes if it is executed standalone (test2() selected and run as JUnit test in Eclipse)
@Test
public void test2() {
MyClass.myStaticMethod(myargs);
}
// when the MyTestClass in executed as JUnit in Eclipse this test fails because Foo.getInstance() returns null
// but this test passes if it is executed standalone (test3() selected and run as JUnit test in Eclipse)
@Test
public void test3() {
MyClass.myStaticMethod(myargs);
}
}
Я знаю, что setUpBeforeClass() запускается только один раз перед первым тестом, я знаю, что фреймворк JUnit создает новый экземпляр MyTestClass для каждого запуска теста. Но я не могу понять, почему, когда я выполняю как JUnit, класс проходит только первый тест, в то время как каждый тест проходит, когда я запускаю их как JUnit в автономном режиме. Не могли бы вы сказать мне, почему? Почему насмешка «выживает» только для первого выполненного теста? Если код в setUpBeforeClass() находится не в setUpBeforeClass(), а в setUp(), который выполняется перед каждым тестом, все тесты проходят, когда я запускаю класс как JUnit.