使用 EasyMock 测试方法的异常

2022-09-04 08:02:29

我是单元测试的新手。我正在将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)是否正确抛出异常,以防万一抛出一些异常。将来,其他一些开发人员可以更改方法的签名(throw Exception实际上不是方法签名的一部分),并从我的方法中删除 throws Exception。那么我怎样才能确保没有人改变它呢?

@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()

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


答案 2