如何使用UnitilsJUnit4模拟静态方法?

时间:2012-12-24 05:23:09

标签: java mocking static-methods unitils

我在getAllCustomers类中有方法CustomerService。在这个方法中,我从CustomerDao类调用另一个静态方法。 现在当我在getAllCustomers类中编写方法customerService的junit时,我想在那里模拟调用 CustomerDao的静态方法,即getAllCustomers。以下是方法getAllCustomers的简短代码段 CustomerService课程。 是否可以使用unitils模拟静态方法调用?

Public static List<CustomerDate> getAllCustomers()
{
//some operations
List<CustomerDate> customers=CustomerDao.getAllCustomers();// static method inside CustomerDao
//some operations
}

上面的代码只是我想要的一个例子。请避免讨论为什么这些方法被设计为静态的 方法。这是一个单独的故事。)

2 个答案:

答案 0 :(得分:0)

我怀疑是否可以用单位来实现。 但请考虑使用PowerMock代替,它似乎能够处理您需要的内容。它可以模拟静态方法,私有方法等(参考:PowerMock

答案 1 :(得分:0)

这将是一个问题:

  • 设置模拟
  • 调用模拟并期待一些数据
  • 根据您的数据验证通话的最终结果

所以,如果没有关于静态调用的真正讨论,可以通过以下方式在PowerMock中进行设置:

@RunWith(PowerMockRunner.class)
@PrepareForTest(CustomerDao.class)
public class CustomerTest {

    @Test
    public void testCustomerDao() {
        PowerMock.mockStatic(CustomerDao.class);
        List<CustomerDate> expected = new ArrayList<CustomerDate>();
        // place a given data value into your list to be asserted on later
        expect(CustomerDao.getAllCustomers()).andReturn(expected);
        replay(CustomerDao.class);
        // call your method from here
        verify(CustomerDao.class);
        // assert expected results here
    }
}