gpt4 book ai didi

java - Mockito 中的可选 stub

转载 作者:行者123 更新时间:2023-12-02 08:10:30 24 4
gpt4 key购买 nike

我想在测试类的父类(super class)中创建一个方法,该方法可以在测试类中 stub 一些常用的方法,但其中一些方法可能不存在。

例如,我有一个像这样的类层次结构:

abstract class A {
void search(); // implemented by subclass

String getFoo() { return "REAL FOO"; }
}

class B extends A {
void search() {
getFoo();
}
}

class C extends A {
void search() {
getFoo();
getBar();
}

String getBar() { return "REAL BAR"; }
}

A(生成骨架的工具)有大量子类,因此我想创建一个父类(super class)以方便我测试:

abstract class AbstractSearchTest {
A underTest;

@Test void test() {
doReturn( "FOO" ).when( underTest ).getFoo();
doReturn( "BAR" ).when( underTest, "getBar" ); // THE PROBLEM!

underTest.search();
}
}

class BSearchTest extends AbstractSearchTest {
BSearchTest() {
underTest = new B();
}
}

class CSearchTest extends AbstractSearchTest {
CSearchTest() {
underTest = new C();
}
}

这基本上是说,“在调用 search() 之前, stub getFoo()。哦,如果子类碰巧有 getBar() >,也 stub 它。”但我不能这样做,因为它会抛出org.powermock.reflect.exceptions.MethodNotFoundException。如何做到这一点?

最佳答案

使用反射来确定该类是否已实现。

try{
Method m = underTest.getClass().getMethod("getBar");
// no exception means the method is implememented
// Do your mocking here
doReturn( "BAR" ).when( underTest, "getBar" );
}catch(NoSuchMethodException e){}

关于java - Mockito 中的可选 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7514116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com