[英]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 }
要做到這一點,您必須有所不同。
pruivate method1()
遵循以下原則:
@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.