我正在测试一个类的实例方法,但它也依赖于对另一个实例方法的调用。如何模拟第二个实例方法的响应?
不是实际的代码,而是等效的:
public class A{
public String[][][] m1(String[][][] arg1){
ArrayList<String[]> arg2 = new ArrayList<>();
String[][][] response = m2(arg1, arg2);
if (response == null)
return arg1;
else
return response;
}
public String[][][] m2(String[][][] arg1, ArrayList<String[]> arg2){
return new String[][][]{{{}}};
}
}
所以这里我将测试方法的m1返回值,但要模拟方法m2的返回
答案 0 :(得分:0)
如@GhostCat所述,使用Mockito Spies将是一个很好的解决方案。
理想情况下,您不必模拟实例方法来测试类中的另一个实例方法。如果您必须模拟该实例方法,则它可能与另一个实例方法不属于同一类(请查看另一个SO post)。如果是这种情况,您可以将该实例方法放入其自己的类中,然后依赖于该类的实例(提供给构造函数)–然后,您可以在使用以下实例创建类时使用该实例方法来模拟该类测试。
或者也许不孤立m1并针对m1运行单元测试,而是只对测试整个类的行为的类运行测试,而不只是单实例方法的行为。
或者,如果两个实例方法确实属于同一个类,那么对单元方法进行单独测试绝对是至关重要的,并且您不使用模拟框架。您可以可以创建类A的子类,该子类覆盖m2并返回模拟结果,该结果类似于m2通常返回的结果。然后,您可以测试此子类并成功对m1进行单元测试。
编辑:如果m2或多或少是一个不需要单独进行测试的辅助方法,那么我将其设为私有方法,然后完全不进行测试,除非进行间接测试通过该类的公共方法。