首页 > 解决方案 > 如何使用参数化构造函数和工厂类调用接口实现两次以在一个类中运行测试?

问题描述

 //  Interface:

    public interface MailSettingConfiguration {

        @Before
        public void setMailServer() throws Exception;       

    }

    //Interface implementation1:

    public class MailSettingConfigurationImplementation1 implements MailSettingConfiguration {

        private static MailSettingsClient sacHelper;

        @Override
        public void setMailServer() throws JSONException
        {
            System.out.println("smtp configuration");
             sacHelper = new MailSettingsClient();

            sacHelper.setSmtpServer("servername", portnumber, "testname", "mailid", authentication, "", "", true);              
        }

    }

   // Interface implementation2:

    public class MailSettingConfigurationImplementation2 implements MailSettingConfiguration {

        private static MailSettingsClient sacHelper;

        @Override
        public void setMailServer() throws JSONException
        {
            System.out.println("smtp configuration");
             sacHelper = new MailSettingsClient();

            sacHelper.setSmtpServer("servername2", portnumber2, "testname2", "mailid2", authentication2, username, password, true);             
        }

    }        

   // Factory implementation:

    public class MailSettingClassFactory {

    @Factory
    public static Object[] createTestClassInstances() throws JSONException, IOException {
            return new Object[] {
        new TestClass1(
    new MailSettingConfigurationImplementation1()),new TestClass2(new MailSettingConfigurationImplementation2())
            };
        }        

  //  TestClass1 constructor 

     private MailSettingConfigurationImplementation1 mailSettingImpl1;
     private MailSettingConfigurationImplementation2 mailSettingImpl2;

    public TestClass1(MailSettingConfigurationImplementation1 mailSettingConfigurationImplementation1,MailSettingConfigurationImplementation2 mailSettingConfigurationImplementation2) throws JSONException, IOException {

            mailSettingImpl1.setMailServer();
            mailSettingImpl2.setMailServer();

        }

   // TestClass2 constructor         

    private MailSettingConfigurationImplementation1 mailSettingImpl1; 
    private MailSettingConfigurationImplementation2 mailSettingImpl2;

    public TestClass2(MailSettingConfigurationImplementation1 mailSettingConfigurationImplementation1, MailSettingConfigurationImplementation2 mailSettingConfigurationImplementation2) throws JSONException,IOException {
            mailSettingImpl1.setMailServer();
            mailSettingImpl2.setMailServer();
        }

如何使用@Factory 注解两次运行 Factory 类?

  1. 最初使用 setmailserver() 运行 Factory 类 - 服务器 1 实现。setmailserver() 未参数化。
  2. 从 2 个不同的类运行所有测试,例如:TestClass1,TestClass2
  3. 使用 setmailserver() 运行 Factory 类 - 服务器 2 实现。setmailserver() 未参数化。
  4. 从 2 个不同的类运行所有测试(与步骤 2 相同)例如:TestClass1,TestClass2

标签: javaseleniumannotationstestngfactory

解决方案


推荐阅读