java—如何将mock注入到需要构造函数参数的bean中

ghg1uchk  于 2021-07-23  发布在  Java
关注(0)|答案(2)|浏览(316)

我有一个springbean原型,它有一些注入的依赖项,也有一些构造函数参数。

public BeanA {

  @Inject private BeanB beanB;

  private String arg;

  public BeanA(String arg) {
    this.arg = arg;
  }

public void methodToTest() {
  // ...
  // ...
  // ...
  }

}

我想单元测试这个类,嘲笑我的老师 BeanB .
通常,我会用 @InjectMocks 开始我内心的嘲弄 BeanA .
我怎样才能做到这一点?到目前为止,我不想注射 BeanB 在构造函数中,因为它将混合业务参数和依赖项。

pgpifvop

pgpifvop1#

为什么将字段注入和构造函数注入混合在一起?我完全不建议进行现场注入,特别是因为它们很难进行单元测试。如果你想混合注射剂,也许这会有帮助:
spring:同时具有字段和构造函数注入的类的单元测试
或者你可以使用反射来设置你的 BeanB 给比娜
使用反射设置私有字段值

unguejic

unguejic2#

Spring有Spring ReflectionTestUtils 可以用来向字段中注入模拟。

@ExtendWith(MockitoExtension.class)
class BeanATest {

  private BeanA beanA;

  @Mock private BeanB beanB;

  void setUp(String arg) {
    beanA = new BeanA(arg);
    ReflectionTestUtils.setField(beanA, "beanB", beanB);
  }

  @Test
  void test() {
    String arg = "arg";
    setUp(arg);

    // ...
    beanA.methodToTest();
    // ...
  }

}

相关问题