java :Spring:如何在Autowired对象中模拟方法

w8biq8rn  于 2023-02-20  发布在  Java
关注(0)|答案(1)|浏览(146)
@Component
public class SomeService {

  public void method1() {
  int batchSize = method2();
  // some operations...
  }

  public void method2() {
  // something
  return 10;
  }

试验类别

@SpringJUnitConfig(classes = SomeService.class)
public class SomeServiceTests {

  @AutoWired
  SomeService someService;

  @Test
  void method1Test() {
  // mock method2 to return some value instead of executing the method in service

  someService.method1();

  // assertions
  }

当我尝试模仿method2如下时,我得到了异常

doReturn(100).when(someService).method2();

例外情况

org.mockito.exceptions.misusing.NotAMockException: 
Argument passed to when() is not a mock!
Example of correct stubbing:
    doThrow(new RuntimeException()).when(mock).someMethod();

我理解的例外,但不知道如何修复,以上共享代码是简化和集中在问题,我的代码有点复杂,不能在这里共享由于公司的政策。
谢谢你的帮助。

8i9zcol2

8i9zcol21#

Exception的字面意思就是它所说的,你的服务不是一个mockito mock,你不能在它上面声明一个行为。
您可以使用Mockito.spy来监视或部分模拟您的服务对象。
以便您只声明第二个方法的行为并执行第一个方法的实际代码。
或者,最简单的方法是在您的情况下使用@SpyBean

@SpyBean
SomeService someService;

之后你就能

doReturn(100).when(someService).method2();

相关问题