使用工厂方法在Junit 5中创建测试实例(无动态测试)

时间:2017-10-08 18:44:02

标签: java junit junit5 junit-jupiter

使用JUnit 4,可以使用运行程序控制测试实例生命周期。例如,我曾经实现 import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib import style style.use('ggplot') web_stats = {'Day': [1,2,3,4,5,6], 'Visitors': [43,53,34,45,64,34], 'Bounce_Rate': [65,72,62,64,54,220]} df = pd.DataFrame(web_stats) data = np.array(df['Bounce_Rate']) def find_outlier(data, q1, q3): lower = q1 - 1.5 * (q3 - q1) upper = q3 + 1.5 * (q3 - q1) return data <= lower or data >= upper def find_indices(data): q1 = np.percentile(data, 25) q3 = np.percentile(data, 75) indices_of_outliers = [] for ind, value in enumerate(data): if find_outlier(value, q1, q3): indices_of_outliers.append(ind) return indices_of_outliers dist=data find_indices = find_indices(dist) fig = plt.figure() ax = fig.add_subplot(111) # 1x1 grid, first subplot ax.plot(dist, 'b-', label='distances') ax.plot( find_indices, data[find_indices], 'ro', markersize = 7, label='outliers') ax.legend(loc='best') 的方法createTest()来创建一个经过微调的实例(在我的例子中,使用Weld来检索CDI就绪实例)。

使用JUnit 5,extensions应该替换跑步者和规则。然而,我无法像JUnit 4那样找到一种方法来创建测试实例。

有没有办法告诉JUnit Jupiter如何在不使用动态测试的情况下创建我的测试实例(例如,使用Weld容器)?

这是我现在在JUnit 4中所做的,并希望能够在Jupiter中做到:

BlockJUnit4ClassRunner

后来:

public class ContainerRunner extends BlockJUnit4ClassRunner {

    private WeldContainer container;

    ...

    @Override
    public Object createTest() {
        return container.select(this.getTestClass().getJavaClass()).get();
    }
}

感谢您的任何见解。

1 个答案:

答案 0 :(得分:1)

现在,最好使用两个Weld JUnit 5 Extensions中的一个。

但是要直接回答您的问题,您可以(三年后)编写实现TestInstanceFactory的扩展,即:

class ContainerExtension implements TestInstanceFactory {
    private WeldContainer container;

    @Override public Object createTestInstance(TestInstanceFactoryContext factoryContext, ExtensionContext extensionContext) throws TestInstantiationException {
        return container.select(this.getTestClass().getJavaClass()).get();
    }
}

然后您的测试使用@ExtendWith(ContainerExtension.class)而不是@RunWith(ContainerRunner.class)

相关问题