Когда мы пытаемся начать что-то новое, мы много думаем обо всем и обо всем. Хотя тем много, иногда небольшие находки заставляют копать дальше. Когда я пытаюсь продемонстрировать простой фреймворк для тестирования с помощью selenium и TestNG, я получаю сообщение об ошибке в консоли «java. lang.AssertionError». Несмотря на то, что он небольшой, он вызывает любопытство, чтобы глубоко погрузиться в него и выйти с захватывающими наблюдениями.

Я использую IntelliJ IDE для своей практики. Изначально я создал проект Maven и добавляю необходимые зависимости в файл pom.xml. Здесь я добавил и селен, и TestNG с https://mvnrepository.com/

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.8.0</version>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>RELEASE</version>
        <scope>compile</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.testng/testng -->
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>7.7.1</version>
        <scope>compile</scope>
    </dependency>

В src main java я создал пакет sample_test и класс Program_1.

Поэтому я создал тестовые примеры с аннотациями TestNG, чтобы проверить имя на этом веб-сайте https://www.numpyninja.com/, где в консоли печатается ошибка Assertion.

package sample_test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.time.Duration;
public class Program_1 {
    WebDriver driver;// declaration
    @BeforeMethod
    public void setUp(){
System.setProperty("web-driver.chrome.driver","C:\\Codebase\\chromedriver_win32 (1)\\chromedriver.exe");
        driver=new ChromeDriver();
        driver.get("https://www.numpyninja.com/");
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
    }
    @Test
    public void verifyName()
    {
        String actualTitle=driver.getTitle();
        String expectedTitle="About | Numpy Ninja";// true 
        Assert.assertEquals(actualTitle, expectedTitle);
    }
   
    @Test
    public void verifyInValidName()
    {
        String actualTitle=driver.getTitle();
        String expectedTitle="Numpy Ninja";
        Assert.assertEquals(actualTitle, expectedTitle)//Assertion error happened in this statement mentioning false
    }
    @AfterMethod
    public void tearDown(){
        driver.quit();
    }
}

Давайте попробуем исправить это через какое-то время после анализа,

  • Что такое утверждение?
  • Типы и методы утверждений?
  • Почему мы требуем утверждения?
  • Как это связано с исключением?
  • Чем он отличается от throw (который обрабатывается как исключение)?

Заявления утверждения

assert — это ключевое слово после JDK 1.4 и более поздних версий. Он бывает двух типов и имеет разные способы формулировки.

assert boolean_result;//Very simple assert 
assert boolean_result :"some_messages";// simple assert
//some method statements
assertEquals();// assertEquals method compares the expected result with that of the actual result and should say true
assertNotEquals();// validating the expected result with that of the actual result in negative scenario and should say true about not equal;
assertNull();//checks the object is null.
assertNotNull();// checks the object which is not null.

Отладка Java-программ, чтобы решить, почему это происходит Раз и навсегда, с помощью простых примеров. Мы сделаем это в контексте проекта Java. Я создал пакет с классом A.

Пример 1: Очень простой тип утверждения

package package1;
public class A {
    public static void main(String[] args)
    {
        System.out.println(1);
        assert false;//
        System.out.println(2);
    }
}
  • Попробуем запустить. На самом деле, по умолчанию оператор assert не выполняется. для выполнения нам нужно явно указать один аргумент виртуальной машины.
  • Перейдите на вкладку «Выполнить» -> «Редактировать конфигурацию» -> «Изменить» -> «Добавить виртуальную машину». В опции VM введите -ea или -enable assertions → нажмите, чтобы применить и ОК.
-ea or -enable assertions
-da or -disable assertions
  • Теперь перезапустите основной метод, ошибка утверждения попадает в основной поток, поэтому поток завершается.

  • Несмотря на то, что по умолчанию каждое утверждение утверждения отключено, если вы хотите, вы можете явно указать отключение утверждения утверждения с одним виртуальным аргументом.
  • включение/отключение утверждений может быть полным выполнением
  • или это может быть конкретный пакет и подпакет или конкретный класс.
  • Возникновение ошибки утверждения всякий раз, когда бизнес-логика терпит неудачу.
assert (boolean literal, expression, variable);
ex. assert false;//rule gets failed so raise the error.
assert true;// it executes successfully
  • По умолчанию операторы assert не выполняются. включение аргумента -ea при выполнении, если он получает ложную ошибку, которая должна быть выдана, и поток завершается, потому что мы не обрабатываем try, catch здесь. если это правда, это передается.
package package1;
public class B {
    public static void main(String[] args)
    {
        System.out.println(1);
        assert true;
        System.out.println(2);
    }
}

Пример 2: Простой тип утверждения.

  • Нам нужно выполнить те же шаги, когда мы пытаемся запустить класс для каждого другого сценария. Перейдите на вкладку «Выполнить» -> «Редактировать конфигурацию» -> «Изменить» -> «Добавить виртуальную машину». В опции VM введите -ea или -enable assertions → нажмите «Применить» и «ОК».
  • Теперь перезапустите основной метод, ошибка утверждения попадет в основной поток, поэтому поток будет завершен, если он окажется ложным с некоторыми сообщениями в консоли.
package package1;
public class C {
    public static void main(String[] args)
    {
        System.out.println(1);
        assert false : "Something went wrong";
        System.out.println(2);
    }
}

Я изучил еще несколько примеров. это было захватывающе!! Никогда не забывайте исследовать.

int i = 10;
assert i == 10;// true.

int i = 10;
 assert i = 10;//if we run this statement we get incompatible types: int cannot be converted to boolean

int i = 10;
  assert i == 10 : ;//if we execute this we get this error java: illegal start of expression
 //after: it can be literals,variables,method calling statements return other than void.
 
 
  assert test();//calling test method
        static boolean test()
        {
            return true;//boolean statement it executes successfully.
        }
        
   assert test();//Method should have return type boolean
     static int test()// Only boolean, so error occurs.
       {
          return 10;
       }
       
       
    assert true : test();// method calling statement other than void.
    static int test()
      {
          return 10;

      
assert true : test();
    //java: 'void' type not allowed here so error occured.
    static void test() 
    {
     }
    
    
     
    int assert = 10;
    /*after jDK1.4 assert is a keyword cant be used as 
      variable,identifier will throw compilation error.*/
    System.out.println(assert);

Как это связано с обработкой исключений и почему его сравнивают с throw

Думаю, теперь мы готовы решить проблему. нет?

public void verifyInValidName()
    {
        String actualTitle=driver.getTitle();
        String expectedTitle="Numpy Ninja";
        Assert.assertNotEquals(actualTitle, expectedTitle);
// it should say true, whenever the condition fails assertion should be thrown.
    }

Здесь я проверяю неравный сценарий с входными данными как не равными, поэтому условие должно быть истинным.

Итак, что мы сделали вывод?

  • Утверждение помогает проверить предположения о логике программы, чтобы удовлетворить истинные или ложные условия.
  • Только в случае false эту ошибку выдает JVM.
  • Метод Equals() определен в классе Object в Java и используется для проверки равенства двух объектов, определенных бизнес-логикой.
  • Фактически, утверждение привело к анализу того, что является исключением и как оно обрабатывается.
  • Исключением является ошибка, возникающая во время выполнения программы.
  • Try-catch: этот метод может перехватывать исключения, используя комбинацию ключевых слов try и catch.
  • Множественные перехваты помогают нам обрабатывать каждый тип исключения отдельно с помощью отдельного блока кода.
  • Ключевое слово Throw используется для создания исключения для его обработки во время выполнения.
  • printStackTrace(): эта функция выводит трассировку стека, имя исключения и другие полезные описания.
  • toString(): эта функция возвращает текстовое сообщение с указанием имени и описания исключения.
  • getMessage(): помогает отобразить описание исключения.

Как вы будете относиться к ошибке? Поделитесь своим мнением в комментарии.

Счастливого обучения!!