使用EasyMock测试方法的异常

时间:2012-09-19 11:42:49

标签: java exception testng easymock

我是单位测试的新手。我正在使用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:last   在mock上调用的方法不能抛出java.lang.Exception“

我是什么 在这做错了?有人可以说明如何编写测试 我的特定情况的案例?

1 个答案:

答案 0 :(得分:20)

协作者的doSomething()方法没有声明它可能会抛出异常,并且你告诉它的模拟抛出一个。这是不可能的。

异常是一个经过检查的异常。只有在方法签名中声明它才能抛出它。如果该方法没有throws子句,它所能做的就是抛出运行时异常(即RuntimeException或任何后代类)。