使用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();
}
}
感谢您的任何见解。
答案 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)
。