当跑步者调用' @之前'时,Spring不会自动装配字段。方法

时间:2018-03-02 17:02:04

标签: java junit concurrency spring-test junit-toolbox

我有以下测试:

@RunWith(Parameterized.class)
@SpringBootTest
@ContextConfiguration(classes = MyConfig.class)
public class OrderPlacementCancelTest {
    @Autowired
    private TestSessionsHolderPerf sessionsHolder;

    @ClassRule
    public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule();

    @Rule
    public final SpringMethodRule springMethodRule = new SpringMethodRule();

    private CommonCredentialSetter commonCredentialSetter;

    @Before
    public void login() throws InterruptedException {        
        int attempts = 0;
        while (!sessionsHolder.isClientLoggedIn() && attempts < 3) {
            Thread.sleep(1000);
            ++attempts;
        }

    }
     @Parameterized.Parameters()
     public static Collection<Object[]> data() {
        ...
     }

并跟随跑步者:

@Test
    public void test() throws Exception {
        Class[] cls = {OrderPlacementCancelTest.class};
        Result result = JUnitCore.runClasses(new ParallelComputer(false, true), cls);
        logger.info("Failure count={}", result.getFailureCount());
        for (Failure failure : result.getFailures()) {
            logger.error(failure.getTrace());
        }
    }

当我通过参赛者开始测试时,我发现标记为login有时方法@Before会引发NullPointerException,因为sessionsHolder为空。

我该如何避免呢?

1 个答案:

答案 0 :(得分:1)

似乎private void StackPanel_PointerEntered(object sender, PointerRoutedEventArgs e) { StoryboardSample1.Begin(); } private void DoubleAnimation_Completed(object sender, object e) { StoryboardSample2.Begin(); } private void DoubleAnimation_Completed_2(object sender, object e) { StoryboardSample3.Begin(); } 与junit规则不能很好地融合。一种选择是通过在参数化测试类的构造函数中执行逻辑来替换@Parameterized,或者在测试方法的开头调用setup方法。

在任何一种情况下,您都可以使用Rule使用TestContextManager值填充测试类,如下所示:

@AutoWired