我是单位测试的新手。我正在使用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“
我是什么 在这做错了?有人可以说明如何编写测试 我的特定情况的案例?
答案 0 :(得分:20)
协作者的doSomething()
方法没有声明它可能会抛出异常,并且你告诉它的模拟抛出一个。这是不可能的。
异常是一个经过检查的异常。只有在方法签名中声明它才能抛出它。如果该方法没有throws
子句,它所能做的就是抛出运行时异常(即RuntimeException
或任何后代类)。