Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用EasyMock模拟父类中的方法_Java_Superclass_Easymock - Fatal编程技术网

Java 如何使用EasyMock模拟父类中的方法

Java 如何使用EasyMock模拟父类中的方法,java,superclass,easymock,Java,Superclass,Easymock,这段代码只是一个例子。我试图测试B,并想用B中的参数模拟方法methodINA。我可以用EasyMock做这个吗?如果可以,怎么做 这不是模拟的目的,您应该模拟方法main,但这会使测试毫无意义,因为您不会简单地测试实际代码 当您想要控制被测试对象使用的对象的行为时,可以使用EasyMock(通常是mocking) 在您的情况下,您唯一的选择是在测试中使用子类B,例如: public abstract class A{ public int methodInA(String a){

这段代码只是一个例子。我试图测试
B
,并想用
B
中的参数模拟方法
methodINA
。我可以用EasyMock做这个吗?如果可以,怎么做

这不是模拟的目的,您应该模拟方法
main
,但这会使测试毫无意义,因为您不会简单地测试实际代码

当您想要控制被测试对象使用的对象的行为时,可以使用EasyMock(通常是mocking)

在您的情况下,您唯一的选择是在测试中使用子类B,例如:

public abstract class A{
    public int methodInA(String a){
         return 0;
    }
}

public class B extends A{
    String a = "ANYTHING";
    public void main(){
        int b = super.methodInA(a);
    }
}

在我的例子中,A是许多类的父类。我想模拟A中的方法,这样我就可以专注于B,而不需要每次为A的子类编写单元测试时都模拟A中方法的行为。在我的例子中,使用子类可能仍然需要大量的重复工作。您有其他解决方案吗?
B
的专门化不需要出现在测试方法中,甚至不需要出现在测试类中,但您需要在某个地方专门化
B
来实现您想要的。当您使用模拟API时,实际上是在创建模拟接口/类的新实现——在接口的情况下,这是使用动态代理或类字节码操作完成的——其行为符合您设置的预期。嘲讽API没有调用一个类的方法,如果你没有设置一个期望。这里的问题听起来更像是一个设计问题,而不是继承,考虑使用一个类,它提供了一个类,提供了<代码>方法> <代码>,并且该类的实例被注入到<代码> B<代码>的实例中。这样,您只需模拟提供
methodInA
的类,并在创建
B
时注入模拟。
@Test
public void testSomething()
{
  final int expected = 5;

  B b = new B()
  {
    public int methodInA(String a)
    {
      return expected;
    }
  };

  b.main();

  //Add assertions here.
}