簡體   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