使任何普通Java类都不可修改

使任何普通Java类都不可修改,java,junit,jmockit,Java,Junit,Jmockit,使用,有没有办法使类不可修改?我知道一些Java类,如Collection和System不能用JMockit模拟 编辑: 既然不清楚我为什么要这样做,让我举个例子 我的代码库与第三方服务交互(比如ThirdParty.java)。我想将调用此服务的所有方法提取/重构到一个单例类中(以便标准化如何使用ThirdParty.java)。让我们调用这个类Handler.java。看起来是这样的: 公共类处理程序{ ... //使该类成为单例的一些代码 ... //第三方呼叫 公共字符串getDetai

使用,有没有办法使类不可修改?我知道一些Java类,如
Collection
System
不能用JMockit模拟

编辑: 既然不清楚我为什么要这样做,让我举个例子

我的代码库与第三方服务交互(比如
ThirdParty.java
)。我想将调用此服务的所有方法提取/重构到一个单例类中(以便标准化如何使用
ThirdParty.java
)。让我们调用这个类
Handler.java
。看起来是这样的:

公共类处理程序{
...
//使该类成为单例的一些代码
...
//第三方呼叫
公共字符串getDetail(){
返回第三方.getSession().getContext().getDetail();
}
公共列表getValues(){
int id=ThirdParty.getSession.getContext().getId();
返回ThirdParty.getSession.getContext().createQuery(id).values();
}
} 

正如您所看到的,在
Handler.java
中没有真正的代码可供测试。但是如果我们在测试中模拟
处理程序
,我们就不会涵盖它的行为。此外,如果我们继续为
处理程序
编写junit,我们最终将模拟所有内容,而不是实际测试。来自
Handler.java
的代码只能在使用它的地方进行“测试”,即在使用
Handler
的其他java类中。因此,我希望今后,我们不应该模拟
处理程序
,而应该强制模拟它使用的第三方
类。

为什么?那些不能被模仿的类被硬编码到库中,这与人们通常想要实现的恰恰相反。你能告诉我们你为什么要这样做吗?如果更多的人问为什么而不是投反对票,这很可能是一个错误。我将更新reasonHi@JoachimSauer,我已更新问题,并已重新打开以获取答案