在抽象类中测试未实现的方法



我有一个抽象类,比如说AbstractClass我有一个没有实现的公共 void 方法myMethod。在测试这个类时,我创建了一个匿名子类,我可以在其中实现我认为合适的myMethod。在AbstractClass中还有另一种方法,比如说myImplementedMethod调用myMethod。有什么技巧可以让我在匿名子类中放入myMethod,以便能够验证它是否已被调用?

编辑:我正在使用Mockito进行嘲笑,这不是我使用另一个框架的地方。

public abstract class AbstractClass {
    public abstract void myMethod();
    public void myImplementedMethod() {
        myMethod();
}
public class AbstractClassTest {
    @Before
    public void setUp() {
        AbstractClass myClass = new AbstractClass() {
            @Override
            public void myMethod(){
                //What could I put here?
            }
        }
    }
    @Test
    public void testMyImplementedMethod() {
        myClass.myImplementedMethod();
        //check that myMethod is called.
    }
}

如果Mockito的间谍对你有用,那就太好了。但是我不相信它会捕获内部方法调用。下面怎么样...

public class AbstractClassTest {
 boolean methodCalled = false;
@Before
public void setUp() {
    methodCalled = false;
    AbstractClass myClass = new AbstractClass() {
        @Override
        public void myMethod(){
            methodCalled = true;
        }
    }
}
@Test
public void testMyImplementedMethod() {
    assertFalse(methodCalled);
    myClass.myImplementedMethod();
    assertTrue(methodCalled);
}
}

您可以在后代类上创建一个间谍对象,调用已实现的方法,然后确保使用verify调用未实现的方法

AbstractClass myInstance= Mockito.spy(myClass);
myInstance.myImplementedMethod();
Mockito.verify(myInstance).myMethod();
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
public class AbstractClassTest {
    private AbstractClass myClass;
    @Before
    public void setUp() {
        AbstractClass instance = new AbstractClass() {
            @Override
            public void myMethod(){}
        }
        myClass = spy(instance);
    }
    @Test
    public void testMyImplementedMethod() {
        myClass.myImplementedMethod();
        verify(myClass).myMethod();
    }
}

你不能像这样使用反射 API

YourClass.getClass().getMethod("myMethod").invoke(obj,args);  // pass the appropriate parameters

如果这引发异常,则您尚未实现该方法。我自己没有尝试过这个,如果它有效,请发表评论。

相关内容

  • 没有找到相关文章

最新更新