2016-05-06 15 views
2

Ich bin etwas neu zu TDD, obwohl ich C für einige Zeit verwendet habe. Als Ergebnis verwende ich Ceedling, um mein eingebettetes Projekt zu testen.Ceedling, wie man definiert, zu CMock

Ich kann rake test:all in gcc, aber ich versuche jetzt, das zu einem eingebetteten Zielsimulator zu bewegen. Ich spezifiziere meinen Cross-Compiler, Linker usw. durch die Datei 'project.yml'.

Als ich rake test:all, erhalte ich einen Fehler, wenn „Kompilieren cmock.c“ (mehrere andere Dateien problemlos kompilieren):

< path_to_cmock >/cmock.c:17:31: error: size of array 'CMock_Guts_Buffer' is too large

Es gibt andere Fehler nach diesem, aber das ist derjenige, der sie schlägt aus.

Wenn ich auf cmock.c, sehe ich am Anfang der Datei:

#ifdef CMOCK_MEM_DYNAMIC 
static unsigned char*   CMock_Guts_Buffer = NULL; 
static CMOCK_MEM_INDEX_TYPE CMock_Guts_BufferSize = CMOCK_MEM_ALIGN_SIZE; 
static CMOCK_MEM_INDEX_TYPE CMock_Guts_FreePtr; 
#else 
static unsigned char   CMock_Guts_Buffer[CMOCK_MEM_SIZE + CMOCK_MEM_ALIGN_SIZE]; 
static CMOCK_MEM_INDEX_TYPE CMock_Guts_BufferSize = CMOCK_MEM_SIZE + CMOCK_MEM_ALIGN_SIZE; 
static CMOCK_MEM_INDEX_TYPE CMock_Guts_FreePtr; 
#endif 

Perfect, so brauche ich nur, wenn erklärt zu finden. Ich mache nur eine Textsuche, um festzustellen, dass sie nirgends deklariert sind ... also vermute ich, dass sie von den Standardwerten innerhalb von ceedling kommen.

fand ich die Dokumentation für CMOCK und unter „Compiled Optionen“,

A number of #defines also exist for customizing the cmock experience...

es auf die #defines zur Liste geht, die ich im Quellcode gefunden habe, aber es gibt nicht an, wo zu finden Sie. Ich habe versucht, eine Include-Datei mit den entsprechenden Definitionen zu erstellen und die Include-Datei ohne Erfolg durch 'project.yml' zu übergeben.

Ich vermute, dass die Antwort unglaublich einfach ist, es ist einfach nirgendwo umrissen, dass ich gesucht habe. Vielen Dank für Ihre Zeit,

Antwort

2

Natürlich war die Antwort starrte mich ins Gesicht.

In der Datei 'project.yml' gibt es einen Abschnitt namens 'define'. Der Standard definiert sind:

:defines: 
    # in order to add common defines: 
    # 1) remove the trailing [] from the :common: section 
    # 2) add entries to the :common: section (e.g. :test: has TEST defined) 
    :commmon: &common_defines [] 
    :test: 
    - *common_defines 
    - TEST 
    :test_preprocess: 
    - *common_defines 
    - TEST 

Ich habe einfach das definiert für mein Ziel:

:defines: 
    # in order to add common defines: 
    # 1) remove the trailing [] from the :common: section 
    # 2) add entries to the :common: section (e.g. :test: has TEST defined) 
    :commmon: &common_defines 
    - __dsPIC33EP32MC204__ 
    - UNITY_INT_WIDTH=16 
    - CMOCK_MEM_INDEX_TYPE=uint16_t 
    - CMOCK_MEM_PTR_AS_INT=uint16_t 
    - CMOCK_MEM_ALIGN=1 
    - CMOCK_MEM_SIZE=1024 
    - CMOCK_MEM_STATIC 
    :test: 
    - *common_defines 
    - TEST 
    :test_preprocess: 
    - *common_defines 
    - TEST 
2

Der richtige Weg, die cmock für Ihre prohect Setup ist wie slightlynybbled in früheren Antwort darauf, bu Sie könnten auch bieten eine versteckte Setup für Ihre cmocks in Ihre project.yml Datei wie folgt:

:cmock: 
    :mock_prefix: mock_ 
    :when_no_prototypes: 
    :warn 
    :enforce_strict_ordering: TRUE 
    :includes_h_pre_orig_header: 
    - ../<cmock_headers_includes>.h 
    :plugins: 
    - :ignore 
    - :ignore_arg 
    - :callback 
    - :expect 
    - :expect_any_args 
    :treat_as: 
    uint8: HEX8 
    uint16: HEX16 
    uint32: UINT32 
    int8:  INT8 
    bool:  UINT8 

Dieses Setup mit Ceedling getestet wurden 0,27, 0,28 und 0.28.1

Verwandte Themen