为私有方法编写测试用例的问题
Issues in writing test case for a private method
我正在尝试为下面的 params 方法编写一个测试用例 class。
编写 JUnit 测试用例时遇到的问题:
问题在于该方法是私有的,并且在它调用超级 class 方法的方法内部。我尝试使用 EasyMock,在那里我可以抑制对超级 class 构造函数
的调用
CustomListener customListenerMock=createMock(CustomListener.class);
expect(customListenerMock.getParam("CHECK_INTEGRITY")).andReturn(null);
expect(customListenerMock.getParam("WRITE_ANSWER")).andReturn(null);
文档说我将能够在调用这些方法时抑制它们,并且可以给出指定的输出,即在这种情况下为 null。
现在我的问题是如何调用私有方法进行测试?我尝试使用反射 API,但它没有按预期工作。
代码:
Method InitialiseSecurityConfiguration = Listener .class.getDeclaredMethod(methodToTest, null);
InitialiseSecurityConfiguration.setAccessible(true);
InitialiseSecurityConfiguration.invoke(fileListenerObj);
当我用反射 API 调用时,这些方法就像那样被调用,并且超类方法没有按需要被抑制。
注意:我使用的是遗留应用程序,不允许更改我的方法的可见性。
class Listener extends CustomListener{
/*
Some More methods
*/
private boolean params()
{
String integrity = "";
String sWAnswer = "";
try
{
try
{
integrity = super.getParam("CHECK_INTEGRITY");
sWAnswer = super.getParam("WRITE_ANSWER");
**Some Business Logic**
super.info("Request Directory : " + sRequestPath);
super.info("Response Directory : " + sResponsePath);
super.info("Error Directory : " + sErrorPath);
}
}
catch (Exception ex)
{
bCheck = false;
}
return bCheck;
}//closing the method params
}//Closing Listener class
我会为调用您感兴趣的私有方法的 public 方法编写测试。
作为一般规则,最好针对 class 的 public API 编写单元测试,这样实现(即私有方法)无需更改即可更改测试。
publicAPI是class的用法,所以要测试一下
我正在尝试为下面的 params 方法编写一个测试用例 class。
编写 JUnit 测试用例时遇到的问题:
问题在于该方法是私有的,并且在它调用超级 class 方法的方法内部。我尝试使用 EasyMock,在那里我可以抑制对超级 class 构造函数
的调用CustomListener customListenerMock=createMock(CustomListener.class);
expect(customListenerMock.getParam("CHECK_INTEGRITY")).andReturn(null);
expect(customListenerMock.getParam("WRITE_ANSWER")).andReturn(null);
文档说我将能够在调用这些方法时抑制它们,并且可以给出指定的输出,即在这种情况下为 null。
现在我的问题是如何调用私有方法进行测试?我尝试使用反射 API,但它没有按预期工作。
代码:
Method InitialiseSecurityConfiguration = Listener .class.getDeclaredMethod(methodToTest, null);
InitialiseSecurityConfiguration.setAccessible(true);
InitialiseSecurityConfiguration.invoke(fileListenerObj);
当我用反射 API 调用时,这些方法就像那样被调用,并且超类方法没有按需要被抑制。
注意:我使用的是遗留应用程序,不允许更改我的方法的可见性。
class Listener extends CustomListener{
/*
Some More methods
*/
private boolean params()
{
String integrity = "";
String sWAnswer = "";
try
{
try
{
integrity = super.getParam("CHECK_INTEGRITY");
sWAnswer = super.getParam("WRITE_ANSWER");
**Some Business Logic**
super.info("Request Directory : " + sRequestPath);
super.info("Response Directory : " + sResponsePath);
super.info("Error Directory : " + sErrorPath);
}
}
catch (Exception ex)
{
bCheck = false;
}
return bCheck;
}//closing the method params
}//Closing Listener class
我会为调用您感兴趣的私有方法的 public 方法编写测试。
作为一般规则,最好针对 class 的 public API 编写单元测试,这样实现(即私有方法)无需更改即可更改测试。
publicAPI是class的用法,所以要测试一下