junit重载课程

时间:2011-11-14 12:54:05

标签: java maven junit junit4 powermock

我使用powermock来模拟Logger.getInstance()方法。这会导致问题,因为junit似乎没有重新加载类,并且在第一个测试测试类有错误的记录器实例之后。

public class LoggedClass {
    public static Logger log = Logger.getInstance();
    ....
}

@RunWith(PowerMockRunner.class)
@PrepareForTest({ LoggedClass.class, Logger.class })
public class SomeTests {
    private Logger log;
    @Before
    public void setUp() {
         PowerMockito.mockStatic(Logger.class);
         log = PowerMockito.mock(Logger.class);
         PowerMockito.when(Logger.getInstance()).thenReturn(log);

         PowerMockito.mockStatic(LoggedClass.class);
    }

    @Test
    public void firstTest() {
         assertTrue(LoggedClass.log == log);
    }

    @Test
    public void secondTest() { // fails
         assertTrue(LoggedClass.log == log);
    }
}

测试失败,因为LoggedClass已经过时了日志实例。我可以显式注入新的记录器实例,但是当需要模拟许多静态变量时,这很麻烦。

如何在每次运行新测试时将junit设置为重新加载类?

1 个答案:

答案 0 :(得分:2)

第二次测试失败的原因是您在log方法中为每个测试创建了@Before的新实例,但由于对Logger.getInstance()的调用是static它只发生过一次。考虑在@Before@BeforeClass执行您的操作。

似乎没有理由为每个测试创建log的新实例。它是mock,因此可以重置。