代码在@Autowired发生之前运行

时间:2017-11-06 16:55:02

标签: spring spring-boot spring-boot-test

我希望在此行运行之前运行一些代码行:

@Autowired
private SomeClass a;

我正在尝试测试类,我尝试了@Before,但是@Autowired在@Before中的代码之前运行,所以在自动装配发生之前还有另一种运行代码的解决方案吗?

这是代码:

测试类:

private classX x;

@Mock
private classA a;

@Autowired
private classB b;

@Before
private void setUpMockResponse() {
    when(a.getMeB()).thenReturn(b);
}

classX代码:

// Constructor of classX class.
public classX(classA a) {
    this.a = a;
    this.b = a.getMeB();
}

如果有任何问题的解决方案我会很高兴看到, 问题是我需要setUpMockResponse中的代码在自动装配到classX之前发生,因为在构造函数中我从方法上得到b是一个模拟器所以我需要在调用方法getMeB()时首先设置响应,我也需要b自动装配。

1 个答案:

答案 0 :(得分:0)

对我来说听起来不错,但我该判断谁?如果你想在注入依赖项之前运行代码,我会编写你自己的setter方法并将@Autowried放在setter上,然后将代码放在setter中的赋值之前:

@Autowired
public void setA(A a)
{
    // TODO - put code here
    this.a = a;
}

其他选项是将其置于setter的一个方面。

请注意,我不推荐任何这些选项只是试图回答你的问题,做这种事情导致折磨下一个可怜的灵魂。你无法在测试中总是需要使用Spring。