有没有办法在TestNG中向@Factory注解发送多个参数?

问题描述 投票:0回答:1

我正在使用@Factory注解来调用一个测试类,并为其生成报告。我将使用参数1到100测试大约100个测试用例。有什么方法可以让我在@Factory注解中使用.CSV表传递所有这些不同的参数。它应该从.CSV中读取列的数据,并在运行时发送这些参数。

java csv testng factory
1个回答
0
投票

这里有一个成熟的例子,它应该为你分解事情。

为了方便起见,我使用了 opencsv 库。

下面是这个依赖关系的样子

<dependency>
  <groupId>com.opencsv</groupId>
  <artifactId>opencsv</artifactId>
  <version>4.1</version>
</dependency>

下面是我的csv文件的内容。

name,ranking,won,lost
Undertaker,1,95,5
Hitman,2,90,10
Yokozuna,10,50,50

下面是测试类的样子:

import com.opencsv.bean.CsvBindByName;
import org.testng.Assert;
import org.testng.annotations.Test;

public class SampleTestClass {


    @CsvBindByName(column = "name")
    private String name;

    @CsvBindByName(column = "ranking")
    private int ranking;

    @CsvBindByName(column = "won")
    private int matchesWon;

    @CsvBindByName(column = "lost")
    private int matchesLost;

    @Test
    public void testSuperStarName() {
        Assert.assertNotNull(name);
    }

    @Test
    public void testSuperStarRanking() {
        Assert.assertTrue(ranking != 0);
    }

    @Test
    public void testMatchesWon() {
        Assert.assertTrue(matchesWon > 0);
    }

    @Test
    public void testMatchesLost() {
        Assert.assertTrue(matchesLost > 0);
    }

    @Override
    public String toString() {
        return "SampleTestClass{" +
                "superStarName='" + name + '\'' +
                ", ranking=" + ranking +
                ", matchesWon=" + matchesWon +
                ", matchesLost=" + matchesLost +
                '}';
    }
}

下面是工厂类的样子 (这是你要运行的类)

import com.opencsv.bean.CsvToBean;
import com.opencsv.bean.CsvToBeanBuilder;
import org.testng.annotations.Factory;

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class TestFactoryProducerTest {
    @Factory
    public static Object[] produceInstances() throws IOException {
        try (
                BufferedReader reader = Files.newBufferedReader(Paths.get("src/test/resources/62280931.csv"));
        ) {
            CsvToBean<SampleTestClass> csvToBean = new CsvToBeanBuilder(reader)
                    .withType(SampleTestClass.class)
                    .build();
            return csvToBean.parse().toArray(new SampleTestClass[0]);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.