我希望在此行运行之前运行一些代码行:
@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自动装配。
答案 0 :(得分:0)
对我来说听起来不错,但我该判断谁?如果你想在注入依赖项之前运行代码,我会编写你自己的setter方法并将@Autowried
放在setter上,然后将代码放在setter中的赋值之前:
@Autowired
public void setA(A a)
{
// TODO - put code here
this.a = a;
}
其他选项是将其置于setter的一个方面。
请注意,我不推荐任何这些选项只是试图回答你的问题,做这种事情导致折磨下一个可怜的灵魂。你无法在测试中总是需要使用Spring。