Wie funktioniert gtest vergleichen der Werte in zwei arrays?
Habe ich gelesen,dieses offizielle Dokument, lernen, wie man Binäre Vergleich und String-Vergleich.
Den ASSERT_EQ und ASSERT_STREQ nicht arbeiten konnten in der array-Vergleich Fall.
Beispielsweise
li@li:~/poc$ g++ -I${GTEST_DIR}/include insertion_sort.cpp insertion_sort_unittest.cpp /home/li/libgtest.a -lpthread -o inser_unit
li@li:~/poc$ ./inser_unit
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from InsertionSortTest
[ RUN ] InsertionSortTest.Two
insertion_sort_unittest.cpp:18: Failure
Value of: two_sorted
Actual: { 2, 5 }
Expected: two
Which is: { 2, 5 }
[ FAILED ] InsertionSortTest.Two (1 ms)
[----------] 1 test from InsertionSortTest (1 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (1 ms total)
[ PASSED ] 0 tests.
[ FAILED ] 1 test, listed below:
[ FAILED ] InsertionSortTest.Two
1 FAILED TEST
insertion_sort_unittest.cpp
#include <limits.h>
#include "insertionsort.h"
#include "gtest/gtest.h"
namespace{
class InsertionSortTest : public ::testing::Test{
protected:
InsertionSortTest() {}
virtual ~InsertionSortTest() {}
virtual void SetUp() {}
virtual void TearDown() {}
};
TEST(InsertionSortTest, Two){
int two[] = {5, 2};
int two_sorted[] = {2, 5};
insertionSort(two, 2);
EXPECT_EQ(two, two_sorted);
}
}
int main(int argc, char **argv){
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
insertion_sort.cpp
#include "insertionsort.h"
void insertionSort(int *data, int size){
for (int i=1,j; i<size; i++){
int key = data[i];
for (j=i-1; j>=0; j--){
if (data[j] > key){
data[j+1]=data[j];
data[j]=key;
}
}
}
}
insertionsort.h
#ifndef INSERTIONSORT_H_
#define INSERTIONSORT_H_
void insertionSort(int *data, int size);
#endif
InformationsquelleAutor liweijian | 2012-04-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht hinzufügen einer Abhängigkeit googlemock, wenn Sie nicht wollen, könnten Sie schreiben Ihre eigenen einfachen Funktion zurückgibt, die ein
testing::AssertionResult
z.B.Dann in den test, rufen Sie:
InformationsquelleAutor Fraser
ASSERT_EQ
vergleicht seine Argumente mitoperator==
. Im Vergleich mitoperator==
Werke fürstd::vector
's, nicht aber für C-arrays in C++. Der Grund ist, wenn Sie versuchen, einen Wert einer C-array in einem Ausdruck, in den meisten Fällen der Wert zerfällt in einen Zeiger auf den Anfang des Speichers, in dem das array abgelegt wird. Sie am Ende den Vergleich von zwei Zeigern. Im Fall von zwei verschiedenen C-arrays diese Zeiger wird nie den gleichen Wert haben.Ihre einfachste Ausweg ist die Verwendung von Google Mock
ASSERT_THAT
makro-und ContainerEq matcher. StattASSERT_EQ
schreibenSie tut es - finden Sie unter github.com/google/googletest/blob/....
Oh, no way! Ich konnte habe geschworen, ich habe es versucht, aber ich werde überprüfen. Vielleicht habe ich einfach angenommen, es würde nicht funktionieren. Vielen Dank für diesen Hinweis!
InformationsquelleAutor VladLosev
Ich denke, es ist genug zu schreiben, genau wie diese.
EXPECT_EQ(memcmp(two, two_sorted, 2 * sizeof(int)), 0);
InformationsquelleAutor Wakana Nogami