Мягкое утверждение Testng работает не так, как ожидалось - PullRequest
0 голосов
/ 06 мая 2020

Мне задали этот тестовый вопрос в интервью. Я ответил, что первый тест не пройден, а второй пройдет. Но к моему удивлению, когда я столкнулся с идеей intelliJ. Я мог видеть, что оба не работают.

Для второго теста ожидаемое значение отображается как «значения». Не могу понять почему?

import org.testng.annotations.Test;
import org.testng.annotations.SoftAssert;

public class SoftAssertion{

SoftAssert softAssert = new SoftAssert();

@Test
public void first(){
 softAssert.assertEquals("values", "value");
 softAssert.assertAll();
}

@Test
public void second(){
 softAssert.assertEquals("value", "value");
 softAssert.assertAll();
}

}

Я использую testng 7.1.0

Результат тестового прогона

1 Ответ

0 голосов
/ 09 мая 2020

Вы создали SoftAssert как член класса, поэтому оба теста работают с одним и тем же экземпляром, и вы накапливаете мягкие утверждения в одном и том же объекте. Когда вы вызываете assertAll() во втором тесте, первое неудачное утверждение уже собрано. И вот мы go.

Таким образом, создание экземпляра SoftAssert на уровне объекта является ошибкой. Он должен быть создан в методе.

Однако есть еще один возможный побочный эффект: TestNG не гарантирует порядок выполнения методов тестирования, поэтому, если сначала выполняется тест second(), вы увидите один не удалось и один прошел.

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