[英]C++ unit testing with Visual Studio test framework
我在為實現的隊列類設置示例測試時遇到一些問題。
這是隊列類:
Queue.h:
typedef float QueueInfoType;
QueueInfoType x;
class Queue
{
public:
Queue(){front = rear = count = 0;}
bool isEmpty();
bool isFull();
void add(QueueInfoType x);
float remove();
int numItems();
enum {MAXQUEUE = 80};
private:
QueueInfoType values[MAXQUEUE];
int front, rear, count;
};
Queue.cpp:
bool Queue::isEmpty()
{
return front == rear;
}
bool Queue::isFull()
{
return count >= MAXQUEUE;
}
void Queue::add(QueueInfoType x)
{
values[rear = (rear + 1) % MAXQUEUE] = x;
count = count + 1;
}
float Queue::remove()
{
count = count - 1;
return x = values[front = (front + 1) % MAXQUEUE];
}
int Queue::numItems()
{
return count;
}
測試方法:
[TestMethod]
void TestNumItems()
{
Queue q;
for(int i = 0; i < 20; i++)
{
q.add(i);
}
int expected = 2;
int actual = q.numItems();
Assert::AreEqual(expected, actual, "queue had: " + actual + " items");
};
我顯然丟失了一些東西,當我調用add方法將項目添加到隊列時,隊列的計數從不會增加,但是項目可以很好地添加到隊列中。
我在靜態庫中編譯隊列類,並在測試項目中添加對它的引用。
有什么想法為什么我的隊列計數永遠不會改變?
編輯:
我正在使用此類創建循環隊列,該類具有由MAXQUEUE定義的最大項目數。
上面是如何定義QueueInfoType的。
注意:
當我將靜態庫更改為可執行文件並將void main()
添加到我的queue.cpp並編寫代碼以測試隊列的功能時,它工作得很好,並且count返回正確。 測試項目將其用作靜態庫時,會發生什么情況嗎?
我不確定,但是必須使用指針來實現隊列類,因此沒有大小限制,您也可以在add函數中使用類似的東西:
void Queue::add(QueueInfoType x)
{
count++;
values[count] = x;
}
因此該實現更容易理解,並且可以解決您的錯誤……我找不到它,它可能會起作用……我會繼續考慮。
PD:對不起我的英語
我認為您的預期應該是“ 20”。
另外,remove返回“ float”,但它可能應該是QueueInfoType。
我運行了測試,它運行正常(除了測試20 vs 2)。 我的測試實際是20歲。
另外,在remove中分配“ x =”似乎不正確。
嘗試將測試例程中的for循環更改為:
for(int i = 0; i < 20; i++)
{
q.add(i + 100);
}
如果最終得到的數字不同,則是因為您不小心超出了陣列的范圍並損壞了堆棧。 由於變量的定義方式,它們可能會成為堆棧中的鄰居。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.