簡體   English   中英

將類與JMockit中的現有類進行模擬(代替“ redefineMethods”)

[英]Mocking class with existing class in JMockit (replacement for `redefineMethods`)

我有兩個類作為輸入,並想與另一個模擬。 在JMockit中,這曾經非常簡單,

Mockit.redefineMethods(originalClass, mockingClass);

但是在0.999版中,已棄用了該方法。 我需要JMockit的較新版本的功能,因此不能再使用較舊的版本。

我從棄用消息中的文檔中猜測,使用建議的“現代”方法來執行此操作將是定義MockUp<originalClass>並將其用作mockingClass

不幸的是,我在運行時都將這兩個值都作為輸入參數(聲明為class<?> ),因此創建類不是一種選擇。

有沒有什么方法可以模擬Mockit.redefineMethods()在0.999版之前所做的事情,即使它可能不是解決此問題的最佳解決方案也是如此?

編輯

我得到的輸入是要Map<Class<?>, Class<?>> mockedClasses的類的Map<Class<?>, Class<?>> mockedClasses指向Map<Class<?>, Class<?>> mockedClasses它們的類。 然后將這些迭代並傳遞給Mockit

for (Map.Entry<Class<?>, Class<?>> entry : mockedClasses.entrySet()) {
  Mockit.redefineMethods(entry.getKey(), entry.getValue());
}

之后,將執行測試代碼,然后以類似方式使用restoreOriginalDefinition()而不是redefineMethods()再次禁用該restoreOriginalDefinition()

好的,問題現在更清楚了。 答案是,無法用另一個任意類來模擬一個類。 您必須將模型類定義為MockUp的子類。 非常老的Mockit.redefineMethods(Class, Class) (從4.5+年前的API中刪除)僅接受任意類,因為該初始API還支持Java 1.4作為測試代碼(自0.999開始不再受支持,它需要泛型和/或注釋)。

暫無
暫無

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

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