2015-05-21 2 views
1

Это тривиальная программа, которая меняет строку.Сценарий Bash для тестирования программы

void str_reverse(const char*, size_t, char*, size_t); 

int main(){ 

    char str[256]; 

    while(fgets(str, 256, stdin)){ 
     if(strncasecmp(str, "quit", 4) == 0) break; 

     size_t size_reversed = strlen(str) * sizeof(char); 
     char* reversed = malloc(size_reversed); 
     str_reverse(str, sizeof(str), reversed, size_reversed); 
     printf("Orginal String : %s\n", str); 
     printf("Reversed String : %s\n", reversed); 
     printf("__________________________________\n"); 
     free(reversed); 
    } 
    return 0; 
} 

void str_reverse(const char* str1, size_t size1, char* str2, size_t size2){ 

    memcpy(str2, str1, size1); 

    char temp; 
    size_t len = strlen(str2) - 1; 
    size_t stop = len/2; 
    size_t i,k; 

    for(i = 0, k = len; i < stop; i++, k--) 
    { 
     temp = str2[k]; 
     str2[k] = str2[i]; 
     str2[i] = temp; 
    } 
    //return str; 
} 

Я пытаюсь наложить сценарий bash для автоматизации компиляции и тестирования этой программы. У меня есть следующие тестовые случаи в виду:

  • Нормальная строка,
  • пустая строка,
  • Числа,
  • смешанные случаи

Может кто-то помочь мне начать работу с этим. Благодарю.

+0

У вас есть Makefile? –

+1

Ваш вопрос несколько широк. Что вы пробовали? С какими ошибками вы столкнулись? Какие ресурсы/учебники вы прочитали? Пожалуйста, добавьте хотя бы часть этой информации к вопросу и укажите конкретную проблему, с которой вы столкнулись, или инструкции, которые вы неправильно поняли. –

ответ

2

Я хотел бы изменить программу, чтобы принять строку отменить, как аргумент командной строки, а затем распечатать обратную строку в качестве вывода. Затем используйте скрипт bash для сравнения вывода программы с ожидаемым выходом.

int main(int argc, char* argv[]){ 

    if (argc != 2) 
    { 
     fprintf(stderr, "Expect to see one argument.\n"); 
     return EXIT_FAILURE; 
    } 

    char* str = argv[1]; 

    size_t size_reversed = strlen(str) * sizeof(char); 
    char* reversed = malloc(size_reversed+1); 
    str_reverse(str, strlen(str), reversed, size_reversed); 
    printf("%s\n", reversed); 
    free(reversed); 

    return EXIT_SUCCESS; 
} 

и Баш скрипт:

#!/bin/bash 

function test_program() 
{ 
    in="$1" 
    expected_out="$2" 
    out=$(./program "$in") 

    if [ "$out" != "$expected_out" ] 
    then 
     echo "output: $out" 
     echo "expected output: $expected_out" 
     echo "Test failed." 
    else 
     echo "Test passed" 
    fi 
} 

test_program "automate the compilation" "noitalipmoc eht etamotua" 
test_program "compilation" "noitalipmoc" 
test_program "abcd" "dcba" 
1

Может быть что-то вроде этого:

#!/bin/bash 
gcc source -o xname 
echo "teststring" | ./xname 
echo "teststring2" | ./xname 
... 
1

Вы можете использовать BATS для автоматизированного тестирования. Это отличный инструмент для автоматизации тестирования.

1

После добавления необходимых включаемые файлы,

#include <string.h> 
#include <stdio.h> 
#include <stdlib.h> 

вы можете использовать сценарий, как показано ниже,

#!/bin/bash 

# Compile reverse.c 
make reverse 

# Declare and feed test strings 
declare -a string_array=("" "string" "12345" "string STRING") 

for str in ${string_array[@]} 
do 
    echo "$str" | ./reverse 
done 
Смежные вопросы