我有一個看起來像這樣的課程:
public class OuterClass {
protected static Server s;
public static class CrazyEvent implements Runnable {
@Override
public void run() {
s.getSystemInfo();
}
}
}
它有一個型別為 Server 的靜態成員,以及一個名為 CrazyEvent 的內部靜態類,它從服務器中提取一些資訊。
我正在嘗試在 powermockito 中測驗這個 run() 方法:
@RunWith(PowerMockRunner.class)
@PrepareForTest(OuterClass.class)
public class StaticInnerClassTest {
private static class ServerMock extends Server {
protected ServerMock(ServerConfig sc) {
super(sc);
}
@Override
public void start() {
}
}
private static class ServerConfigMock extends ServerConfig {
}
@Mock
ServerMock s = new ServerMock(new ServerConfigMock());
@Mock
UserMan um;
@InjectMocks
OuterClass.CrazyEvent ce = new OuterClass.CrazyEvent();
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(s.getUserMan()).thenReturn(um);
}
@Test
public void testInnerClass() {
ce.run();
}
}
讓我們來看看代碼:我用 ServerMock 擴展了實際的 Server 物件,這樣我就可以覆寫在建構式中呼叫的煩人的方法。我模擬的 Server 物件是 s。理想情況下,我想將此模擬注入嵌套的靜態內部類,因為它必須使用它。
問題是,當我呼叫 ce.run() 時,s 為空并且模擬沒有正確注入。我對 PowerMockito 還很陌生,我一直在努力尋找有關此特定案例的 SO 資訊。
編輯:外部類中有一個私有靜態 slf4j 記錄器,當被內部類中的 run() 方法呼叫時,該記錄器為 null。我不知道如何實體化它。我嘗試擴展外部類并使記錄器受到保護并以這種方式實體化它,但沒有運氣。
沒關系,我不小心留下了對 PowerMockito.mockStatic() 的呼叫,這破壞了一切
uj5u.com熱心網友回復:
只需要OuterClass.s = s在setUp().
我還介紹了一個我使用的問題,該問題PowerMockito.mockStatic(Outerclass.class)導致我的靜態記錄器變為空。我洗掉了這一行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/387534.html
上一篇:我正在執行什么型別的測驗?
