我有三個類A,B和C其中A是抽象類,B也是抽象類,B擴展A和C是非抽象的它擴展了B.我有名稱爲AddressService的變量,它在類B中是公共的,並且在類A中是私有的。我正在編寫一個類C的測試用例,它是非抽象的,並且調用了A類和A類中的方法我需要設置用於調用方法的AddressService addressService變量的值。 AddressService是有方法的接口,我調用我的超A級以下的方法之一是我的代碼如何使用mockito或powermockito設置超級類中的私有變量的值
這裏是我的測試類
@RunWith(PowerMockRunner.class)
@PrepareForTest({ServiceLocatorBeanFactory.class})
public class createTest {
@SuppressWarnings("unchecked")
@Test
public void createTurnaroundDocument() throws Exception{
PowerMockito.mockStatic(ServiceLocatorBeanFactory.class);
AddressService addressService = Mockito.mock(AddressService.class);
PowerMockito.when(ServiceLocatorBeanFactory.getService(AddressService.class)).thenReturn(addressService);
C original = new C();
C handler = PowerMockito.spy(original);
handler.createDocument();
}
}
我嘗試設置的值地址服務addressService存在於類A中,它以多種方式抽象,但值仍然爲空,並且我得到NullPointer異常。
以下幾種不同的方式
1.Whitebox.setInternalState(handler, AddressService.class, addressService);
當我設置這樣的值未設置,併爲空,給我的NullPointerException
2.MemberModifier.field(A.class, "addressService").set(A.class, addressService);
當我設置這種方式,我得到下面的異常
java.lang.IllegalArgumentException:無法將AddressService字段A.addressService設置爲java.lang.Class
3.Whitebox.setInternalState(A.class, AddressService.class, addressService);
當我設置這種方式,我得到下面的異常
org.powermock.reflect.exceptions.FieldNotFoundException:沒有靜態字段從「AddressService」分配可以在A.
的類層次結構中找到4.Whitebox.setInternalState(A.class, "addressService", addressService);
當我設置這種方式,我得到下面的異常
org.powermock.reflect.exceptions.FieldNotFoundException:沒有命名靜態字段「addressService」可以在類票數發現答:
有沒有一種方法可以使用Mockito或PowerMockito設置超級類中存在的私有變量的值。請幫助
根據您的代碼字段。set(a,addressService);這個「a」是什麼, –
的值是多少,「a」的值是多少。它是A類的實例嗎?另外我的課A是抽象的,因爲我已經提到過 –
對不起,應該是「c」,因爲你的對象c是我們需要的A對象。 –