【发布时间】:2022-01-28 06:57:34
【问题描述】:
我正在尝试使用@Factory 创建一个类的多个实例,并按照我们使用IMethodInterceptor 侦听器传递的相同顺序打印值:
public class MainFactoryClass implements IMethodInterceptor {
@Factory
public Object[] mainFactory() {
Object[] data = new Object[6];
data[0] = new MainImpClass(9);
data[1] = new MainImpClass(10);
data[2] = new MainImpClass(11);
data[3] = new MainImpClass(12);
data[4] = new MainImpClass(13);
data[5] = new MainImpClass(14);
return data;
}
@Override
public List<IMethodInstance> intercept(List<IMethodInstance> list, ITestContext
iTestContext) {
Map<Integer, IMethodInstance> orders = new TreeMap<>();
for (IMethodInstance instance : list) {
MainImpClass testData = (MainImpClass) instance.getInstance();
orders.put(Integer.valueOf(testData.getA()), instance);
}
List<IMethodInstance> orderList = new ArrayList<IMethodInstance>(list.size());
for (Integer order : orders.keySet()) {
IMethodInstance test = orders.get(order);
orderList.add(test);
}
return orderList;
}
}
如果我有 5 个 @Test 方法来打印类中的值,它只考虑最后一个 @Test 方法并打印值。我究竟做错了什么?。即getValue1, getValue2, getValue3, getValue4 未运行。
尝试使用priority 或dependsOnMethods。代码如下:
@Listeners({ MainFactoryClass.class })
public class MainImpClass {
int a;
public MainImpClass(int a) {
this.a = a;
}
public int getA() {
return a;
}
@Test(priority = 0)
public void getValue1() {
System.out.println("Value from getValue1: " + a);
}
@Test(priority = 1)
public void getValue2() {
System.out.println("Value from getValue2: " + a);
}
@Test(priority = 2)
public void getValue3() {
System.out.println("Value from getValue3: " + a);
}
@Test(priority = 3)
public void getValue4() {
System.out.println("Value from getValue4: " + a);
}
@Test(priority = 4)
public void getValue5() {
System.out.println("Value from getValue5: " + a);
}
}
输出按我们创建实例的顺序排列,但仅从最后一个@Test开始。
Value from getValue5: 9
Value from getValue5: 10
Value from getValue5: 11
Value from getValue5: 12
Value from getValue5: 13
Value from getValue5: 14
testng.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Factory Suite">
<test thread-count="5" name=" Factory Test" group-by-
instances="true">
<classes>
<class name="com.trial.MainFactoryClass"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
【问题讨论】:
-
你没有展示你的实际测试,但你想让我们弄清楚它们有什么问题?
-
由于字符限制,我不知道它是否允许我这样做。也更新了代码。
-
你的测试实际上并没有测试任何东西。最有可能的是,每次测试后屏幕都会“清空”。添加断言(假);在您的其他一项测试中,看看会发生什么
-
作为初学者,我正在尝试了解工厂注释的工作原理。而且我不希望代码很复杂。如果我添加dependOnMethod,我会得到依赖不存在的方法错误
-
添加断言如何使代码“复杂”? medium.com/geekculture/…
标签: java testng testng.xml testng-annotation-test