[英]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.