Java 如何对bean进行部分模拟

Java 如何对bean进行部分模拟,java,spring,mockito,Java,Spring,Mockito,我有下面的JUNIT类 @RunWith(SpringJUnit4ClassRunner.class) @Configuration @ContextConfiguration(locations = { "classpath:junit-xxx.xml", "classpath:junit-xxxxx.xml" }) public class TestFictionalClass { @Autowired // I changed this to @Mock so the first "

我有下面的JUNIT类

@RunWith(SpringJUnit4ClassRunner.class)
@Configuration
@ContextConfiguration(locations = { "classpath:junit-xxx.xml", "classpath:junit-xxxxx.xml" })
public class TestFictionalClass
{

@Autowired   // I changed this to @Mock so the first "when" below works
private MyService mService


@Before
    @Transactional
    public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);

         Mockito.when((mService).myMockedMethod(Mockito.any(String.class)))
        .thenReturn("Hello");

        Mockito.when((mService).myOtherRealMethod(Mockito.any(BigDecimal.class), Mockito.any(BigDecimal.class))).thenCallRealMethod();

}
我在这里尝试的是模拟其中一个方法,因此它总是返回值“hello”,但我希望类中的另一个方法正常执行。问题是,我在第二种方法中遇到以下错误

org.mockito.exceptions.base.MockitoException:无法调用抽象 java对象上的实方法!只有在以下情况下才可能调用实方法 模仿非抽象方法

如何模拟有问题的类,以便重写它的一个方法返回的值

多谢各位


PS:我正在使用Mockito和Spring MVC,而不是@Mock use@Spy注解。间谍活动提供了一种只模仿特定方法的方式(带有“when-then”)并让其他方法保持原样


更多关于间谍活动的信息:。

我想你需要PowerMock。不幸的是,我仅限于使用mockito我担心mockito本身不足以达到这个目的。您确定不能将powermock用作mockito的扩展吗?Powermock不会取代mockito。我非常确信,您可以使用powermock做到这一点;-)我不能使用外部库,但它可能包含在内。如果您可以发布一个示例,我可以尝试itI,但它说MyService是一个接口,不能被监视:(请尝试@SpyBean,甚至尝试注入实现SpyBean是SpingBoot,我使用的是Spring MVC。注入是什么意思?你的意思是使用实现来声明类而不是接口?对不起,我没有注意到Spring MVC。是的,我的意思是监视MyService的实现而不是接口。我把它编译成b但是它的效果和mock一样(类中所有变量都是空的)。我会同时接受这个答案,除非我得到更好的答案