簡體   English   中英

使用Visual Studio測試框架進行C ++單元測試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM