Как это альтернатива TestNg SoftAssert? - PullRequest
0 голосов
/ 25 марта 2020

Вот курс udemy (от "Lets Kode It") для разработки инфраструктуры автоматизации тестирования. В ходе курса инструктором был разработан класс CheckPoint для использования в каркасе.

CheckPoint аналогично TestNg SoftAssert. Мотивация разработки CheckPoint заключается в том, что она позволяет вам настраивать ваши сообщения об ошибках и дает больше информации о том, какие точки проверки в вашем методе тестирования не пройдены.

Я не уверен, что код CheckPoint подходит качество или если это можно было бы даже рассмотреть для слияния с самой библиотекой TestNg. Может кто-нибудь сказать мне, если они видят какие-либо серьезные проблемы в коде, просто читая его, кроме того, что API неудобен?

Класс CheckPoint:

import org.testng.Assert;
import java.util.ArrayList;
import java.util.HashMap;

public class CheckPoint {
    public static HashMap<String, String> resultMap = new HashMap<String, String>();
    private static String PASS = "PASS";
    private static String FAIL = "FAIL";

    public static void clearHashMap() {
        System.out.print("Clearing Results Hash Map");
        resultMap.clear();
    }

    //Set status of the Result Map
    private static void setStatus(String mapKey, String status) {
        resultMap.put(mapKey, status);
        System.out.println(mapKey + " :-> " + resultMap.get(mapKey));
    }

    /*
     Keeps the verification point status with testName, Result and Verification Point Message in hash map
      @param testName      - The test case name
      @param result        - Verification Result from test method
      @param resultMessage - Message tagged with verification
     */
    public static void mark(String testName, boolean result, String resultMessage) {
        testName = testName.toLowerCase();
        String mapKey = testName + "." + resultMessage;
        try {
            if (result) {
                setStatus(mapKey, PASS);
            } else {
                setStatus(mapKey, FAIL);
            }
        } catch (Exception e) {
            System.out.println("Exception Occurred...");
            setStatus(mapKey, FAIL);
            e.printStackTrace();
        }
    }

    /*
     Keeps the verification point status with testName, Result and Verification Point Message in hash map
     It asserts all the verifications in a test method, if any verification
     in a test method is failed then the test case is failed

     @param testName      - The test case name
     @param result        - Verification Result from test method
     @param resultMessage - Message tagged with verification
    */
    public static void markFinal(String testName, boolean result, String resultMessage) {
        testName = testName.toLowerCase();
        String mapKey = testName + "." + resultMessage;
        try {
            if (result) {
                setStatus(mapKey, PASS);
            } else {
                setStatus(mapKey, FAIL);
            }
        } catch (Exception e) {
            System.out.println("Exception Occurred...");
            setStatus(mapKey, FAIL);
            e.printStackTrace();
        }

        ArrayList<String> resultList = new ArrayList<String>();

        for (String key: resultMap.keySet()) {
            resultList.add(resultMap.get(key));
        }

        for (int i = 0; i < resultList.size(); i++) {
            if (resultList.contains(FAIL)) {
                System.out.println("Test Method Failed");
                Assert.assertTrue(false);
            } else {
                System.out.println("Test Method Successful");
                Assert.assertTrue(true);
            }
        }
    }
}

Образец теста:

import CheckPoint;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class CheckpointTests {
    @BeforeMethod
    public void methodSetup(){
        CheckPoint.clearHashMap();
    }

    @Test
    public void test1(){
        CheckPoint.mark("test1-step1", false, "test1 fail");
        CheckPoint.mark("test1-step2", true, "test1 pass");
        CheckPoint.markFinal("test1-step3", true, "test1 pass");
    }

    @Test
    public void test2(){
        CheckPoint.mark("test2-step1", true, "test2 pass");
        CheckPoint.markFinal("test2-step2", true, "test2 pass");
    }

}

Образец вывода:

Clearing Results Hash Map

test1-step1.test1 fail :-> FAIL
test1-step2.test1 pass :-> PASS
test1-step3.test1 pass :-> PASS
Test Method Failed



java.lang.AssertionError: expected [true] but found [false]
Expected :true
Actual   :false
{long stack trace here!}


Clearing Results Hash Map

test2-step1.test2: pass :-> PASS
test2-step2.test2: pass :-> PASS
Test Method Successful
Test Method Successful


===============================================
Default Suite
Total tests run: 2, Passes: 1, Failures: 1, Skips: 0

1 Ответ

0 голосов
/ 06 апреля 2020

Возможно, вы захотите использовать ConcurrentHashMap, если к карте будут обращаться несколько тестов, что приведет к исключению одновременной модификации, кроме того, что я не вижу ничего плохого в частности. Также используются регистраторы, такие как slf4j вместо System.out.println.

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