Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法在不重复代码的情况下,从两个不同的类中两次运行相同的测试集_Java_Junit_Interface_Configuration_Testng - Fatal编程技术网

Java 有没有办法在不重复代码的情况下,从两个不同的类中两次运行相同的测试集

Java 有没有办法在不重复代码的情况下,从两个不同的类中两次运行相同的测试集,java,junit,interface,configuration,testng,Java,Junit,Interface,Configuration,Testng,} `我正在尝试按照以下顺序从2个java文件运行testng测试 配置1 从java文件1运行所有测试 从java文件2运行所有测试 配置2 从java文件1运行相同的测试集 从java文件2运行相同的测试集 在不重复代码的情况下,如何调整测试以按上述顺序运行? 注意:类2不能扩展类1,因为它已经扩展了其他一些框架类如果您将测试类与一个@Factory耦合,则可以这样做 下面是您的操作方法[我正在使用TestNG7.0.0-beta7,这是发布此答案时的最新版本] 定义一个抽象出设置和拆卸 构

}

`我正在尝试按照以下顺序从2个java文件运行testng测试

配置1 从java文件1运行所有测试 从java文件2运行所有测试 配置2 从java文件1运行相同的测试集 从java文件2运行相同的测试集

在不重复代码的情况下,如何调整测试以按上述顺序运行?
注意:类2不能扩展类1,因为它已经扩展了其他一些框架类

如果您将测试类与一个
@Factory
耦合,则可以这样做

下面是您的操作方法[我正在使用TestNG
7.0.0-beta7
,这是发布此答案时的最新版本]

  • 定义一个抽象出
    设置
    拆卸
  • 构建(1)中定义的接口的一个或多个实现
  • 使用
    @Factory
    实现生成一个或多个测试类实例,其中每个实例都注入了(2)中定义的每个实现
  • 这是一个完整的样品

    定义设置和拆卸功能的接口

    公共接口ITestCase配置{
    无效设置();
    void tearDown();
    }
    
    接口的实现

    public类VariantOne实现ITestCaseConfiguration{
    @凌驾
    公共作废设置(){
    System.err.println(“来自VariantOne的setup());
    }
    @凌驾
    公共无效拆卸(){
    System.err.println(“从VariantOne中删除());
    }
    }
    
    public类VariantOne实现ITestCaseConfiguration{
    @凌驾
    公共作废设置(){
    System.err.println(“来自VariantOne的setup());
    }
    @凌驾
    公共无效拆卸(){
    System.err.println(“从VariantOne中删除());
    }
    }
    
    这是工厂的样子

    public class JavaFile2 extends frameworkClass{
        @Test(priority = 0, groups = { "webdriver", "UI","helloTest1"})
        public void test1(){}
        @Test(priority = 1, groups = { "webdriver", "UI","helloTest1"})
        public void test2(){}
        @Test(priority = 2, groups = { "webdriver", "UI","helloTest1"})
        public void test3(){}
        @Test(priority = 3, groups = { "webdriver", "UI","helloTest1"})
        public void test4(){}
        @Test(priority = 4, groups = { "webdriver", "UI","helloTest1"})
        public void test5(){}
    
    }
    

    您可以在框架类中使用@BeforClass方法,并将其参数化,以便为配置1和2运行它。我猜您的setMailServer1()和setMailServer2()方法除了使用不同的数据集之外,做了相同的事情

    代码如下所示:

    import org.testng.annotations.Factory;
    
    public class MyTestClassFactory {
    
      @Factory
      public static Object[] createTestClassInstances() {
        return new Object[] {
          new SampleTestClass(new VariantOne()), new SampleTestClass(new VariantTwo())
        };
      }
    }
    
    测试类别1:

    public class Frameworkclass
    {
    @Parameters({"data1","data2"})
    @BeforeClass
    public void setup(String data1, String data2)
    {
        setMailServer();
        System.out.println(data1+"   "+data2);
    }
    }
    
    TestClass2:

    public class JavaFile1 extends FrameworkClass 
    {
    
        @Test(priority = 0, groups = { "webdriver", "UI","helloTest"})
        public void test1(){}
        @Test(priority = 1, groups = { "webdriver", "UI","helloTest"})
        public void test2(){}
        @Test(priority = 2, groups = { "webdriver", "UI","helloTest"})
        public void test3(){}
        @Test(priority = 3, groups = { "webdriver", "UI","helloTest"})
        public void test4(){}
        @Test(priority = 4, groups = { "webdriver", "UI","helloTest"})
        public void test5(){}
    }
    
    套件文件:

    public class JavaFile2 extends FrameworkClass
    {
        @Test(priority = 0, groups = { "webdriver", "UI","helloTest1"})
        public void test1(){}
        @Test(priority = 1, groups = { "webdriver", "UI","helloTest1"})
        public void test2(){}
        @Test(priority = 2, groups = { "webdriver", "UI","helloTest1"})
        public void test3(){}
        @Test(priority = 3, groups = { "webdriver", "UI","helloTest1"})
        public void test4(){}
        @Test(priority = 4, groups = { "webdriver", "UI","helloTest1"})
        public void test5(){}
    
    }
    

    您正在使用哪个测试框架--JUnit?testng.In setup()我正在尝试处理这两个配置。这可以通过testng?@ArthiVigneshwari实现——不清楚你想要什么。请编辑您的问题并添加您试图实现的示例。@KrishnanMahadevan我的目标是使用不同的配置多次运行测试。@KrishnanMahadevan请查看下面的示例。我想使用setMailServer1()运行test1到test5,然后使用第二个配置setMailServer2()再次运行位于不同JAVA文件中的同一组测试。如何使第一个配置最初运行,运行5个测试,执行第二个配置,再次运行相同的5个测试而不复制代码?testng或接口概念能帮助我实现这一点吗?@ArthiVigneshwari请不要忘记接受答案,这样问题就解决了。当然……尝试一下……肯定可以@Krishnan MahadevanAm不理解构造函数的工厂类实现。对于同一个测试类(SampleTestClass),我们是否创建了两个实例,其中包含两个实现(VariantOne()和VariantTwo())?是的。这是正确的。这只是为了演示。您可以自由更改MyTestClassFactory。createTestClassInstances()(工厂类)来实例化不同的测试类实例,如果需要的话。@factory公共静态对象[]createTestClassInstances(){返回新对象[]{新测试类1(新VariantOne()),新测试类2(新VariantWO())};}感谢Nitish提供的数据提供程序示例。@ArthiVigneshwari很乐意提供帮助:)我正在寻找类级实现,因为类中有许多测试(大约50个测试),并且无法使用@dataProvider annotation对每个测试进行注释。所以我认为工厂的概念是解决这个特殊问题的最好办法。不过,这个例子很好理解。我们将在以后的案例中使用它。谢谢当然@工厂看起来更适合您的案例,因为它在类级别而不是方法级别上工作
    public class JavaFile2 extends FrameworkClass
    {
        @Test(priority = 0, groups = { "webdriver", "UI","helloTest1"})
        public void test1(){}
        @Test(priority = 1, groups = { "webdriver", "UI","helloTest1"})
        public void test2(){}
        @Test(priority = 2, groups = { "webdriver", "UI","helloTest1"})
        public void test3(){}
        @Test(priority = 3, groups = { "webdriver", "UI","helloTest1"})
        public void test4(){}
        @Test(priority = 4, groups = { "webdriver", "UI","helloTest1"})
        public void test5(){}
    
    }
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="testsuit" parallel="false" verbose="2">
        <test name="test1" parallel="false" preserve-order="true">
            <classes>
                <class name="TestProject.test.JavaFile1"/>
                <parameter name="data1" value="value1"/>
                <parameter name="data2" value="value2"/>
            </classes>
         </test>
         <test name="test2" parallel="false" preserve-order="true">
            <classes>
                <class name="TestProject.test.JavaFile2"/>
                <parameter name="data1" value="value3"/>
                <parameter name="data2" value="value4"/>
            </classes> 
        </test>
    </suite>
    
    [RemoteTestNG] detected TestNG version 6.14.3
    ...
    ... TestNG 6.14.3 by Cédric Beust (cedric@beust.com)
    ...
    
    value1   value2
    PASSED: test1
    PASSED: test2
    PASSED: test3
    PASSED: test4
    PASSED: test5
    
    ===============================================
        test1
        Tests run: 5, Failures: 0, Skips: 0
    ===============================================
    
    value3   value4
    PASSED: test6
    PASSED: test7
    PASSED: test8
    PASSED: test9
    PASSED: test10
    
    ===============================================
        test2
        Tests run: 5, Failures: 0, Skips: 0
    ===============================================
    
    
    ===============================================
    testsuit
    Total tests run: 10, Failures: 0, Skips: 0
    ===============================================