簡體   English   中英

如何訪問私有方法內部的對象?

[英]How to access the object inside the private method?

我使用PowerMock / Mockito模擬了私有方法,現在我的問題是如何訪問此方法中聲明的對象?

例如 。

private void method1()
{
MyObject ob = new MyObject();

}

現在在我的測試代碼中,我想訪問ob對象以驗證值。

本指南詳細介紹了如何使用PowerMock模擬構造函數調用:

...但是使用PowerMock不必更改代碼,而是可以指示PowerMock截獲對新File(..)的調用並返回模擬對象。 為此,我們像往常一樣創建File.class類型的模擬:

 File fileMock = createMock(File.class); 

期望可以調用新文件,我們只需執行以下操作:

 expectNew(File.class, "directoryPath").andReturn(fileMock); 

因此,在您的情況下,您應該在測試用例或設置方法中使用它們

MyObject mockOb = createMock(MyObject.class);
expectNew(MyObject.class).andReturn(mockOb);

通過添加這些,您將具有以下行為:

每當測試用例運行的代碼中有一個new MyObject() ,都會返回PowerMock模擬的對象實例。 因此在代碼中的哪個位置創建新的MyObject實例並不重要,它與createMock()函數創建的實例完全相同。

編輯

讓我們舉個例子

 Class A { private void method1() { Obj obj = new Obj(); obj.setX(10); } //Here I want to access the obj object to verify the values } 

要做到這一點,您必須有所不同。

  1. 創建真實的A實例
  2. 為Obj構造函數設置模擬
  3. 運行您的邏輯,觸發邏輯pruivate method1()
  4. 檢查模擬的Obj實例上的值
    • 如果值不可測試(在邏輯上已對其進行了某些修改),則zou可以檢查setX()是否被調用了適當的時間。

遵循以下原則:

@Test
public void testMyPrivateMethod() {
    //1. object with the logic to test
    A a = new A();

    //2. set up mocking
    Obj mockObj = createMock(Obj.class);
    expectNew(Obj.class).andReturn(mockObj);

    //3. trigger logic to test
    a.someOtherMethodThatCallsMethod1();

    //4. test Obj (find out if setX() has been called or not)
    verify(mockObj).setX(any(Integer.class));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM