簡體   English   中英

我如何使用jMockit模擬標記為final並具有私有構造函數的類

[英]How do I mock a class marked final and has a private constructor using jMockit

我想使用JMockit編寫一些基於狀態的測試來模擬CSVRecord 問題是CSVRecordfinal (這意味着我必須使用JMockit CSVRecord's框架),並且CSVRecord's構造函數具有程序包私有可見性。

由於它是私有程序包,因此我無法調用new CSVRecord(arg, arg, ...) ,這意味着我永遠無法實例化我的模擬。 它的父級CSVParser是唯一可以創建實例的類。

JMockit是否有應對這種情況的方法?

注意: JMockitMockito是我們在該項目上使用的唯一框架。 沒有其他框架可以接受。 我的偏好是使用MockUp。

如果僅是調用私有構造函數的問題,那么是的,JMockit具有處理此問題的工具。 參見教程

聽起來更像CSVRecord不是CSVRecord的理想選擇。 如果可能的話,針對以內部使用它的另一個公共類為目標的測試將是更好的選擇。

否則,JMockit將為Deencapsulation類提供newInstance方法。

附帶說明,Mockito僅支持基於行為的測試。 JMockit提供了“模型”( MockUp ),但它與編寫基於狀態的純黑盒測試不同。

采用:

ConstructorReflection.newInstance

在較新版本的Jmockit中。

暫無
暫無

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

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