0

クラスgetAllCustomers内にメソッドがあります。このメソッド内で、クラスCustomerServiceから別の静的メソッドを呼び出します。今、クラス内CustomerDaoのメソッドのjunitを書いているとき、 ieの静的メソッドへの呼び出しをモックしたい. クラス内 のメソッドの簡単なコード スニペットを次に示します。unitils を使用して静的メソッド呼び出しをモックすることは可能ですか?getAllCustomerscustomerServiceCustomerDaogetAllCustomersgetAllCustomersCustomerService

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

上記のコードは、私が入れようとしている単なる例です。これらのメソッドが静的メソッドとして設計されている理由についての議論は避けてください。それは別の話です。)

4

2 に答える 2

0

unitilsで実現できるかどうかは疑問です。ただし、代わりに、必要なものを処理できると思われるPowerMockの使用を検討してください。静的メソッド、プライベート メソッドなどをモックできます (参照: PowerMock )

于 2012-12-24T05:48:31.297 に答える
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
    }
}
于 2012-12-24T06:08:50.700 に答える