如何在bean上进行部分模拟

时间:2019-02-26 20:10:12

标签: 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 "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

1 个答案:

答案 0 :(得分:1)

使用@Spy注释代替@Mock。间谍提供了一种仅模拟特定方法(使用“ when-then”)并使其他方法保持原样的方法。

有关间谍的更多信息:link