使用 EasyMock 测试方法的异常
Posted
技术标签:
【中文标题】使用 EasyMock 测试方法的异常【英文标题】:Testing Exceptions of a method with EasyMock 【发布时间】:2012-09-11 17:17:03 【问题描述】:我是单元测试的新手。我正在使用 TestNG 和 MyEclipse 为我的应用程序开发单元测试用例。在这样做时,我遇到了 EasyMock 的一些问题。这是我的代码(出于安全原因更改了类名称、方法名称和返回类型,但您会清楚地了解我在这里要实现的目标)。
public MyClass
// This is a method in my class which calls a collaborator which I
// want to mock in my test case
public SomeObject findSomething(SomeOtherObject param) throws Exception
SomeOtherObject param a = myCollaborator.doSomething(param);
// Do something with the object and then return it
return a;
现在这是我的测试。现在我真正想在我的测试中实现什么 情况是我想检查我的功能(findSomething)是否正确 在抛出异常的情况下抛出异常。未来一些 其他开发人员可以更改签名(抛出异常不是 实际上是方法签名的一部分)并删除抛出 我的方法例外。那么我怎样才能确保没有人改变 是吗?
@Test(dataProvider="mydataProvider", expectedExceptions=Exception.class)
public void MyTest(SomeOtherObject param) throws Exception
EasyMock.expect(myCollaboratorMock.doSomething(param)).andThrow(new Exception());
EasyMock.replay(myCollaboratorMock);
我遇到了异常
"java.lang.IllegalArgumentException: 最后 在 mock 上调用的方法不能抛出 java.lang.Exception"
我是什么 在这里做错了吗?有人可以阐明如何编写测试 适合我的特定场景?
【问题讨论】:
【参考方案1】:协作者的doSomething()
方法没有声明它可能会抛出异常,而您是在告诉它的mock 抛出一个异常。这是不可能的。
Exception 是一个已检查的异常。只有在方法签名中声明它才能被抛出。如果该方法没有throws
子句,它所能做的就是抛出运行时异常(即RuntimeException
或任何后代类)。
【讨论】:
错误。通过使用generic quirks,几乎可以从任何地方抛出已检查的异常。以上是关于使用 EasyMock 测试方法的异常的主要内容,如果未能解决你的问题,请参考以下文章