在春季测试中模拟依赖性的自动依赖性



我试图在测试中模拟依赖关系的依赖性。以下是我的课程的样子。

class A {
  @Autowired B b;
  @Autowired C c;
  public String doA() {
    return b.doB() + c.doC();
  }
}
class C {
  @Autowired D d;
  public String doC() {
    return d.doD();
  }
}
class D {
   public String doD() {
      return "Hello";
   }
}

我试图在调用方法doa()时嘲笑D类中的dod();但是,我不想在B类中模拟DOB()方法。以下是我的测试案例。

@RunWith(SpringRunner.class)
@SpringBootTest(
  classes = MyTestApplication.class,
  webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
)
public class ATest {
  @Autowired
  private A a;
  @InjectMocks
  @Spy
  private C c;
  @Mock
  private D d;
  @Before
  public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
  }
  @Test
  public void testDoA() {
    doReturn("Ola")
      .when(d)
      .doD();
    a.doA();
  }
}

这仍然最终返回" Hello"而不是" Ola"。我在 a 上尝试了@InjectMocks。但这只是导致自动B依赖关系B为无效。我的设置是否缺少某些东西,或者是错误的方法?

谢谢。

使用@MockBean,因为这将在执行测试方法文档之前将模拟豆注入应用程序上下文。

可用于在Spring ApplicationContext中添加模拟的注释。可以用作@configuration类中的类级注释或字段,或@runwith the SpringRunner的测试类。

@RunWith(SpringRunner.class)
@SpringBootTest(
classes = MyTestApplication.class,
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  public class ATest {
  @Autowired
  private A a;
  @MockBean
  private D d;
  @Test
  public void testDoA() {
   doReturn("Ola")
      .when(d)
      .doD();
    a.doA();
   }
}

相关内容

  • 没有找到相关文章

最新更新