我有一個關於如何在單元測試中「驅動」基於flex bison的解析器掃描器的問題。flex bison掃描儀解析單元測試,如何驅動測試案例
最終的解決方案將是一個命令解析器可用或telnet到目標板。我有一個使用stdin的全功能flex bison實現。
現在我的重點是獲取命令解析器的單元測試運行。
我希望能夠爲解析器(一個命令)提供一個「常量字符串」,然後測試在應用程序(在應用程序存根)中調用相應的命令。
我不知道如何爲此設置flex和bison。請從下面的測試案例:從cmd_lexer.l
status_cmd_test.c:
#include "CUnit/Basic.h"
#include "cmd_stub.h"
void scan_string(const char* str);
void testSTATUS_OK(void)
{
scan_string("status\n\0\0");
CU_ASSERT(1 == status_sub_nrof_invokes())
}
摘錄:
void scan_string(const char* str)
{
YY_BUFFER_STATE buf;
buf = yy_scan_string(str);
yylex();
yy_delete_buffer(buf);
}
cmd_parser.y不包含任何C代碼,只野牛語法。從cmd_test.c
摘錄(具有INT主要(),其中庫尼特代碼所在)
if (NULL == CU_add_test(suite_p, "test of status", testSTATUS_OK))
{
CU_cleanup_registry();
return CU_get_error();
}
/* Run all tests using the CUnit Basic interface */
CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();
CU_cleanup_registry();
return CU_get_error();
我試圖弄明白憑我的文檔不知道如何駕駛野牛(yyparse()或類似的東西)。
任何人都可以給我一個提示嗎?
/的Mikael
那麼,這是OP的答案的一個很好的開始。你做了一個非常有趣的(但不完整的)最後一點。我認爲如果你真的把OP推向了正確的方向,並將重點放在這一點上,這將是一個很好的答案。那麼你能否詳細說明_automated測試工具__更適合基於_language的接口組件? – Joost
@Joost我指的是測試的語言驗證套裝,我覺得這些套裝不在所要求的測試範圍之內。我試圖說「你不能從這裏到達」。至少這些評論會給讀者留下指引。 –