SoftAssertion специально для тестирования в TestNG - PullRequest
0 голосов
/ 13 сентября 2018

Я использую мягкое утверждение TestNG, как в следующем коде.

public class SoftAssertionTest {
    SoftAssert softAssert = new SoftAssert();

    @Test
    public void test1(){
        softAssert.assertEquals(2, 3);
        softAssert.assertEquals(2, 2);
        softAssert.assertEquals(2, 5);
        softAssert.assertAll();
    }

    @Test
    public void test2(){
        softAssert.assertEquals(2, 2);
        softAssert.assertTrue(false);
        softAssert.assertAll();
    }
}

Но когда этот тестовый класс запущен, для test1 он вернет результат, подобный -

java.lang.AssertionError: The following asserts failed:
    expected [3] but found [2],
    expected [5] but found [2]

, что правильно, но для test2 он возвращает ошибкиtest1 и test2

java.lang.AssertionError: The following asserts failed:
    expected [3] but found [2],
    expected [5] but found [2],
    expected [true] but found [false]

На самом деле, он должен возвращать результат только test2.

Этого можно достичь, создав локальную переменную SoftAssert в каждом методе тестирования.Но это может быть дубликатом кода.

Есть ли какой-либо способ, которым мы можем использовать один и тот же объект, и в каждом методе теста очищать результаты теста от этого объекта, чтобы в новом методе теста он фиксировал только ошибки, связанные с этим методом.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вам нужно создать объект SoftAssert для каждого теста, а не иметь переменную класса.Таким образом, ваш код должен выглядеть следующим образом:

public class SoftAssertionTest {


    @Test
    public void test1(){
        SoftAssert softAssert = new SoftAssert();
        softAssert.assertEquals(2, 3);
        softAssert.assertEquals(2, 2);
        softAssert.assertEquals(2, 5);
        softAssert.assertAll();
    }

    @Test
    public void test2(){
        SoftAssert softAssert = new SoftAssert();
        softAssert.assertEquals(2, 2);
        softAssert.assertTrue(false);
        softAssert.assertAll();
    }
}

Если вы используете селен с TestNG, вы должны использовать расширение qaf TesNG , которое обеспечивает встроенную поддержку подтверждения и проверки сообщает о каждом утверждении / проверке в отчетах о том, прошло оно или нет.

С QAF ваш пример может выглядеть следующим образом:

import static com.qmetry.qaf.automation.util.Validator.verifyThat;
import static com.qmetry.qaf.automation.util.Validator.verifyTrue;
import static org.hamcrest.Matchers.equalTo;

public class SoftAssertionTest {

    @Test
    public void test1(){
       verifyThat(2, equalTo(3));
       verifyThat(2, equalTo(2));
       verifyThat("just for fun",2, equalTo(5));
    }

    @Test
    public void test2(){
        verifyThat(2, equalTo(2));
        verifyTrue(false,"failure message","success message");
    }
}

Вы получите отчет, как показано ниже:

test1
Check Points:   


Expected: <3>
     Actual: was <2>


Expected: <2>
     Actual: was <2>

just for fun
Expected: <5>
     Actual: was <2>


test2
Check Points:   

just for fun
Expected: <2>
     Actual: was <2>

failure message

Вы увидите красно-зеленую отметку в html отчетес каждой контрольной точкой. test result Обратите внимание, что она также предоставляет вам детали успеха.В случае браузера / мобильного qaf прикрепит снимок экрана с каждой контрольной точкой.

0 голосов
/ 16 сентября 2018

SoftAssert класс имеет только один открытый метод в своем источнике - assertAll().Поэтому обычной практикой является создание нового экземпляра SoftAssert для каждого теста.

...