Sposób przeprowadzenia testu:
Podczas przygotowywania ramek z danymi, które będą przesyłane np. za pomocą UART'a zachodzi konieczność sprawdzenia czy wszystkie dane są w odpowiednich miejscach i w odpowiedniej postaci.
Poniżej przedstawię tylko prostą testową procedurę, bez funkcji testowej.
Dodatkowym atutem przy takim sprawdzaniu danych jest wyświetlenie informacji na których miejscach następuje rozbieżność w zadanych parametrach. Informacja z błędem będzie dotyczyła pierwszego parametru, który nie zgadza się z zadanym.
Drugi sposób pozwalający na uzyskanie wiadomości z informacją błędnego elementu może wyglądać następująco:
Tutaj wykonałem zwykłą pętlę for przechodzącą przez wszystkie elementy. W przypadku wystąpienia błędu pojawi się dokładna informacja który element jest zły oraz jego aktualne wartości.
Funkcję można wykorzystać do samego przygotowywania ramek, tak aby upewnić się, że przygotowaliśmy poprawne dane do przesłania, sprawdzanie zdekodowanych danych, przygotowywanie ramki z odpowiedzią, gdzie dodatkowo wykonuje się operację na podanych parametrach itp.
Poniżej przedstawię tylko prostą testową procedurę, bez funkcji testowej.
- #define _START_FRAME 0x01
- #define _COMMAND_CODE 0x56
- #define EXAMPLE_ARRAY_LENGTH 0x07
- uint8_t testFuntrion(uint8_t *ptrToArray, uint8_t arraySize, uint8_t param1, uint8_t param2)
- {
- /*
- * Prepare array
- */
- return 0; //If parameters OK
- }
- TEST(ExampleArrayTest, prepResponseArray_ProperArray)
- {
- uint8_t testArray[EXAMPLE_ARRAY_LENGTH] = { 0x00 };
- uint8_t functionTestReturnValue = 1; //By Default set to error
- const uint8_t param1 = 5;
- const uint8_t param2 = 10;
- const uint8_t param1_ModifyRefValue = (param1 * 3) - 28;
- const uint8_t param2_ModifyRefValue = ((param2 * 5) - 3)/23;
- const uint8_t functionReturnValueExpexted = 0;
- const uint8_t referenceArray_HardCoded[EXAMPLE_ARRAY_LENGTH] = { _START_FRAME,
- EXAMPLE_ARRAY_LENGTH,
- _COMMAND_CODE,
- param1,
- param2,
- param1_ModifyRefValue,
- param2_ModifyRefValue };
- const uint8_t numberOfElementsToCheck = ((sizeof(referenceArray_HardCoded) / sizeof(referenceArray_HardCoded[0])));
- functionTestReturnValue = testFuntrion(&testArray[0],
- (sizeof(testArray)/sizeof(testArray[0])),
- param1,
- param2);
- ASSERT_EQ(functionReturnValueExpexted, functionTestReturnValue);
- ASSERT_THAT(std::vector<uint8_t>(referenceArray_HardCoded
- ,referenceArray_HardCoded + numberOfElementsToCheck)
- ,::testing::ElementsAreArray(testArray));
- }
Dodatkowym atutem przy takim sprawdzaniu danych jest wyświetlenie informacji na których miejscach następuje rozbieżność w zadanych parametrach. Informacja z błędem będzie dotyczyła pierwszego parametru, który nie zgadza się z zadanym.
W przypadku pozytywnego rezultatu dostaniemy informację o powodzeniu testu:
Drugi sposób pozwalający na uzyskanie wiadomości z informacją błędnego elementu może wyglądać następująco:
- for (uint8_t i = 0; i < numberOfElementsToCheck; i++)
- {
- ASSERT_EQ(referenceBuffer[i], bufferToCheck[i])
- << "***********************\n"
- << "Error in element number: " << unsigned(i)
- << "\nActual Value is: " << unsigned(bufferToCheck[i])
- << "\nExpected Value is: " << unsigned(referenceBuffer[i]);
- }
Tutaj wykonałem zwykłą pętlę for przechodzącą przez wszystkie elementy. W przypadku wystąpienia błędu pojawi się dokładna informacja który element jest zły oraz jego aktualne wartości.
Funkcję można wykorzystać do samego przygotowywania ramek, tak aby upewnić się, że przygotowaliśmy poprawne dane do przesłania, sprawdzanie zdekodowanych danych, przygotowywanie ramki z odpowiedzią, gdzie dodatkowo wykonuje się operację na podanych parametrach itp.