Как напечатать сообщение о прохождении при прохождении теста, используя TestNG SoftAssertions - PullRequest
0 голосов
/ 28 марта 2019

В SoftAssertion, он печатает только сообщение о сбое, когда тест не пройден, но нет условий для печати сообщения о прохождении, когда тест проходит.Я хочу напечатать сообщение пропуска, когда SoftAssertion проходит.

Я написал ниже метод оболочки для AssertEquals, как показано ниже: 1. SoftAssertion.java == >>

import org.testng.asserts.SoftAssert;

public class SoftAssertion {

    public SoftAssert softAssert = new SoftAssert();

    public SoftAssertion() {
    }

    public void assertAll(){
        softAssert.assertAll();
    }

public void assertEquals(String actual, String expected, String failMessage, String passMessage) {
       if (actual.equals(expected)){
               softAssert.assertEquals( actual,  expected,  failMessage);
               Report.testPass(passMessage);
           } else{
               softAssert.assertEquals( actual,  expected,  failMessage);
               Report.testFail(failMessage);
           }
       }
}
Тестовый класс == >>
public class NewSoftAssertTest {

    @Test
    public void myTest(){
        Report.startReport("New Soft Assert Test",
                "1) Test Soft Assert");

        SoftAssertion softAssert = new SoftAssertion();

        softAssert.assertEquals("A","B","Strings are not equal", "Strings are equal");
        softAssert.assertEquals("Hello", "Hello", "Hello is not equal to Hello", "Hello is equal to Hello");

        softAssert.assertAll();

    }
}

Приведенный выше код работает отлично.Я хочу знать, является ли это правильным способом записи пропускаемого сообщения в TestNG SoftAssert?

В одном из постов кто-то предложил добавить блок try catch, как показано ниже 1. SoftAssertion .java == >>

import org.testng.asserts.SoftAssert;

public class SoftAssertion {

    public SoftAssert softAssert = new SoftAssert();

    public SoftAssertion() {
    }

    public void assertAll(){
        softAssert.assertAll();
    }

public void assertEquals(String actual, String expected, String failMessage, String passMessage){
       try {
           softAssert.assertEquals(actual, expected, failMessage);
           System.out.println("Assertion passed");
           Report.testPass(passMessage);
       }catch (AssertionError e){
           System.out.println("Assertion failed");
           Report.testFail(failMessage);
           throw e;
       }
   }

}
Тестовый класс == >>
public class NewSoftAssertTest {

    @Test
    public void myTest(){
        Report.startReport("New Soft Assert Test",
                "1) Test Soft Assert");

        SoftAssertion softAssert = new SoftAssertion();
        softAssert.assertEquals("A","B","Strings are not equal", "Strings are equal");
        softAssert.assertEquals("Hello", "Hello", "Hello is not equal to Hello", "Hello is equal to Hello");
        softAssert.assertAll();

    }
}

На консоли он правильно показывает ошибку подтверждения для A и B, но в отчете он пропускает шаг и печатает «Строки равны»

Q1.Мой вопрос, где это идет не так?Он должен войти в блок try catch и записать сообщение об ошибке.

Q2.Какой подход лучше, первый или второй с использованием try catch?

1 Ответ

1 голос
/ 29 марта 2019

Чтобы обеспечить регистрацию сообщений как для пропущенных, так и для неудачных утверждений, вы можете сделать что-то вроде этого (я использую последнюю выпущенную версию TestNG на сегодняшний день, 7.0.0-beta3):

Создание настраиваемого класса утверждений путем расширения org.testng.asserts.SoftAssert [Вы также можете взглянуть на org.testng.asserts.LoggingAssert, если хотите вместо него расширить].

Вот пример реализации.

import org.testng.asserts.IAssert;
import org.testng.asserts.SoftAssert;

public class SimpleLoggingAssert extends SoftAssert {

  @Override
  public void onAssertSuccess(IAssert<?> assertCommand) {
    System.err.println(assertCommand.getMessage() + " <PASSED> ");
  }

  @Override
  public void onAssertFailure(IAssert<?> assertCommand, AssertionError ex) {
    String suffix =
        String.format(
            "Expected [%s] but found [%s]",
            assertCommand.getExpected().toString(), assertCommand.getActual().toString());
    System.err.println(assertCommand.getMessage() + " <FAILED>. " + suffix);
  }
}

Вот код теста:

import org.testng.annotations.Test;

public class NewSoftAssertTest {

  @Test
  public void myTest() {

    SimpleLoggingAssert softAssert = new SimpleLoggingAssert();

    softAssert.assertEquals("A", "B", "Test1: Ensure strings are equal");
    softAssert.assertEquals("Hello", "Hello", "Test2: Ensure strings are equal");

    softAssert.assertAll();
  }
}

Вот результат выполнения

Test1: Ensure strings are equal <FAILED>. Expected [B] but found [A]
Test2: Ensure strings are equal <PASSED> 

java.lang.AssertionError: The following asserts failed:
    Test1: Ensure strings are equal expected [B] but found [A]
Expected :B
Actual   :A
 <Click to see difference>


    at org.testng.asserts.SoftAssert.assertAll(SoftAssert.java:47)
    at com.rationaleemotions.stackoverflow.qn55387064.NewSoftAssertTest.myTest(NewSoftAssertTest.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:131)
    at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:570)
    at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:170)
    at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
    at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:790)
    at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:143)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
    at org.testng.TestRunner.privateRun(TestRunner.java:763)
    at org.testng.TestRunner.run(TestRunner.java:594)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:398)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:392)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:355)
    at org.testng.SuiteRunner.run(SuiteRunner.java:304)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1146)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1067)
    at org.testng.TestNG.runSuites(TestNG.java:997)
    at org.testng.TestNG.run(TestNG.java:965)
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)


===============================================
Default Suite
Total tests run: 1, Passes: 0, Failures: 1, Skips: 0
===============================================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...