Когда мы пытаемся начать что-то новое, мы много думаем обо всем и обо всем. Хотя тем много, иногда небольшие находки заставляют копать дальше. Когда я пытаюсь продемонстрировать простой фреймворк для тестирования с помощью 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(): помогает отобразить описание исключения.
Как вы будете относиться к ошибке? Поделитесь своим мнением в комментарии.
Счастливого обучения!!