Java 你如何模拟可丢弃的物体?
我想为我的应用程序编写Junit测试来处理错误方法,它如下所示Java 你如何模拟可丢弃的物体?,java,spring,junit,mockito,Java,Spring,Junit,Mockito,我想为我的应用程序编写Junit测试来处理错误方法,它如下所示 public void myHandlingError(Throwable t) {//content} 我想模拟可丢弃的物体,但我找不到任何例子。 以下是我的想法 public void myHandlingErrorTest(){ Throwable t = new Exception(); myClass.myHandlingError(t); . .
public void myHandlingError(Throwable t) {//content}
我想模拟可丢弃的物体,但我找不到任何例子。
以下是我的想法
public void myHandlingErrorTest(){
Throwable t = new Exception();
myClass.myHandlingError(t);
.
.
.
任何建议都将不胜感激 术语mock在某种程度上意味着您使用诸如EasyMock之类的模拟框架来创建您正在寻找的对象。但对于表示异常的对象,很少需要这样做。您知道,异常通常是在“错误输入”上创建的 我的测试通常做的是:将一些“坏”输入驱动到类中;然后期望抛出某个异常。我的测试捕获该异常,并检索该异常的一个或多个属性;例如,它的消息(使用断言进行验证) 另一方面,异常是在生产代码中使用new创建的(大多数情况下)。因此,无论如何,没有简单的方法来嘲笑这一点。为异常创建工厂,并使用依赖项注入。。。听起来有点过分了。你看,异常的好处是:在大多数情况下,代码是关于:“抛出的错误输入”。所以您只提供了错误的输入,除了要在测试中抛出以进行进一步验证的异常 在您的例子中,您正在测试实际接收可丢弃/异常对象作为参数的代码;在这里,可以使用您开始使用的方法—在测试中创建对象并将其传递给您的“处理程序”。要回显,您不应该对异常或一次性使用模拟。这有几个原因:
- 异常是数据对象的一种类型:异常不是充当协作者,而是在协作者之间携带一段数据。数据对象通常很难模拟,有许多
方法要存根(对于可变数据对象更是如此,其中get
需要模拟匹配的副作用)。因为数据对象通常没有依赖项和稳定的实现,所以在测试中使用真实类的缺点很少set
- 有一些难以模拟的系统提供的方法,如
。你不应该做那种模拟的工作fillInStackTrace
- Throwable还有一些无法模仿的
方法,如final
和addsupprested
。因为它们是最终的,EasyMock和Mockito不能使用动态代理来覆盖它们,所以要想模拟这些方法,您必须使用PowerMock或其他字节码重写模拟工具getsupprested
- 您可以创建并传入各种现有的、易于实例化的、经过良好测试的系统异常,包括
、IllegalArgumentException
,甚至NullPointerException
本身RuntimeException
- Throwable、Exception和RuntimeException都是非常明确地设计用于子类化的,因此如果您确实希望使用自定义子类进行测试,那么您可以非常轻松地在测试中创建一个真正的嵌套异常或Throwable子类