Статический и нестатический в TestNg - PullRequest
0 голосов
/ 18 мая 2018

У меня есть senario, где я хочу понять, использовать модификатор доступа Статический и не статический в TestNG.Вот фактический код `

public class BaseClass {

    public  WebDriver driver =null;
    public File f = null;
    public FileInputStream fs = null;
    public static Properties config = null;
    private final String configPath="C:\\Users\\prakumak\\eclipse-workspace\\WebDriverTestNGDDFramwork\\src\\MangoHCM\\Config.properties";

    @BeforeClass
    public  void setup() throws Exception {

        f = new File(configPath);
        try {
        fs = new FileInputStream(f);
        config = new Properties();
        config.load(fs);
        }catch(FileNotFoundException e) {
            System.out.println(" File is not present");
        }catch(IOException e) {
            System.out.println("File not loaded");
        }

        if(config.getProperty("BrowserName").equalsIgnoreCase("Firefox")) {
            driver = new FirefoxDriver();
        }else if(config.getProperty("BrowserName").equalsIgnoreCase("Chrome")) {
            driver = new ChromeDriver();
        }else {
            throw new Exception("BrowserName is either not mentione OR not correct");
        }

    }

Сценарий 1: Когда я задаю переменную Properties STATIC и метод setup () как НЕ статический, я все еще могу напрямую вызывать переменную Properties в нестатическом методе setup ().Как можно использовать статическую переменную в нестатическом методе?

сценарий 2: Когда я задаю метод Setup () как STATIC, а переменную Properties как нестатическую, я получаю сообщение об ошибке, говорящее, что «annot сделать статическийссылка на нестатическое поле ".Это нормально для меня.Помогите, пожалуйста, статическому. Как статическое и нестатическое работает в TestNG?Это то же самое, что и обычная концепция Java, или здесь что-то другое?делает добавление аннотации в любой метод в testNG делает его статическим?

1 Ответ

0 голосов
/ 18 мая 2018

Концепция статического и нестатического одинакова в Java и TestNG.

Для нестатического всегда требуется контекст, на который ссылается это.Статика не требует контекста, но вы можете использовать имя класса.Использование имени класса не требуется, если ваш код находится внутри этого класса (например, BaseClass.config).То же правило применяется к методам (т. Е. BaseClass.setup () в вашем коде, если только установка не объявлена ​​как статическая).

Если вы добавите нестатический метод setup () с аннотацией @Before, вы должны иметьдва метода, один из которых требует контекста, а другой нет.Чтобы сделать ваш код более читабельным, я предлагаю переименовать ваш статический метод setup () в setupClass () .

Поскольку ваш метод аннотирован @BeforeClass, он должен быть статическим.Это связано с классом, а не с контекстом.Это неявно требуется для @ BeforeClass.

  • @ BeforeClass требует статический метод
  • @ Before требуется нестатический метод

Вы всегда можете получить доступполе и методы, которые не требуют контекста из методов, которые требуют контекста.Имейте в виду, что поля, которые не имеют контекста, совместно используются статическими и нестатическими методами и даже между различными нестатическими методами, имеющими другой контекст.

Основное правило - придерживаться одного и того же модификатора, либо не-статический или статический, для полей и методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...