Test-NG: превращение класса @BeforeClass во что-то другое (возможно, @BeforeSuite?) - PullRequest
3 голосов
/ 16 декабря 2011

Для моего проекта мне нужно установить два свойства на уровне JVM перед запуском тестов (с testng, как говорит субъект).Вот код, который я использую, чтобы обеспечить наличие этих двух свойств:

import org.testng.annotations.BeforeClass;

public class AbstractPamTest
{
    protected String user;
    protected String passwd;
    protected String badPasswd;

    @BeforeClass
    public void setUp()
    {
        user = System.getProperty("test.login");
        passwd = System.getProperty("test.passwd");
        if (user == null || passwd == null)
            throw new IllegalStateException("Please define test.login and"
                + " test.passwd before running tests");
        badPasswd = passwd + "x";
    }
}

В этом коде проблема в том, что все мои тесты должны наследовать этот класс, поэтому setUp() запускается каждый раз.Как я могу заставить этот метод работать только один раз?

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

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

public class AbstractPamTest
{
  protected static final String user;
  protected static final String passwd;
  protected static final String badPasswd;

  static
  {
      user = System.getProperty("test.login");
      passwd = System.getProperty("test.passwd");
      if (user == null || passwd == null)
          throw new IllegalStateException("Please define test.login and"
              + " test.passwd before running tests");
      badPasswd = passwd + "x";
  }
}

Или поместите его в совершенно другой класс, который используется / вызывается классами, которым требуется пароль / пользователь.Вам не нужно будет расширять AbstractPamTest.Кроме того, вы должны предоставить там getter / setter, чтобы вы могли изменить пользователя / пароль во время выполнения, если одному тестовому сценарию нужны разные значения.

  private  static String user;
  private  static String passwd;
  private  static String badPasswd;

  static
  {
      user = System.getProperty("test.login");
      passwd = System.getProperty("test.passwd");
      if (user == null || passwd == null)
          throw new IllegalStateException("Please define test.login and"
              + " test.passwd before running tests");
      badPasswd = passwd + "x";
  }

  public static String getUser()
  {
    return user;
  }

  public static void setUser(String pUser)
  {
    user = pUser;
  }

  public static String getPasswd()
  {
    return passwd;
  }

  public static void setPasswd(String pPasswd)
  {
    passwd = pPasswd;
  }
1 голос
/ 16 декабря 2011

Почему бы не использовать @BeforeSuite?

.

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