繁体   English   中英

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

[英]How to mock static methods using UnitilsJUnit4?

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

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

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

我怀疑团结是否可以实现。 但是请考虑改用PowerMock ,它似乎能够处理您的需求。 它可以模拟静态方法,私有方法等(参考: PowerMock

这是一个问题:

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

因此,无需费力就静态调用,可以通过以下方法在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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM