首页 > 解决方案 > 未定义对 `vtable [CMakeLists.txt] 的引用(单元测试)

问题描述

在进行单元测试时,我遇到了几个错误。我的目标是查看我的 make->shipCost() 是否等于预期。

TEST(FactoryTestSet, USNShipCost) {
    USN_Fleet_Factory* makeAShip; 
    USN_Ship *make; 
    makeAShip = new USN_Ship_Factory;
    make = makeAShip->CreateAircraftCarrier("Aircraft Carrier");
    EXPECT_EQ(make->shipCost(), 8); 
    make = makeAShip->CreateCruiser("Cruiser");
    EXPECT_EQ(make->shipCost(), 5); 
    make = makeAShip->CreateDestroyer("Destroyer");
    EXPECT_EQ(make->shipCost(), 3); 
    make = makeAShip->CreateFrigate("Frigate");
    EXPECT_EQ(make->shipCost(), 2); 
}

TEST(FactoryTestSet, PLANShipCost) {
    PLAN_Fleet_Factory* makeAVessel; 
    PLAN_Ship *assemble; 
    makeAVessel = new PLAN_Ship_Factory;
    assemble = makeAVessel->CreateAircraftCarrier("Aircraft Carrier");
    EXPECT_EQ(assemble->shipCost(), 8); 
    assemble = makeAVessel->CreateCruiser("Cruiser");
    EXPECT_EQ(assemble->shipCost(), 4); 
    assemble = makeAVessel->CreateDestroyer("Destroyer");
    EXPECT_EQ(assemble->shipCost(), 3);
    assemble = makeAVessel->CreateFrigate("Frigate");
    EXPECT_EQ(assemble->shipCost(), 1);
}

我的一个基本子类的示例如下:

class GF_Class_Aircraft_Carrier : public USN_Ship{
private:
    int shipPrice = 8;
    int PI = 10;
public:
    void accept(Visitor &v); 
    virtual void ShipName() {std::cout << "- USS Gerald R. Ford\n";}
    virtual void shipHullNumber() {std::cout << "- CVN-75\n";}
    void shipClassName() {std::cout << "- Gerald Ford Class Aircraft Carrier\n";}
    void shipType() {std::cout << "- Aircraft Carrier\n";}
    void arament() {std::cout << "- 40 F-35 Lightning's, 10 E-8 Growler Hornet's, 8 SH-60 Seahawk's\n";}
    int shipCost() {std::cout << "- Ship Cost:$" << shipPrice << " billion\n"; return shipPrice;}
    int powerIndex() {return PI;}
    virtual void assignHomePort() {std::cout << "- Home Port:  \n";}
    virtual void assignAdmiral() {std::cout << "- Commanding Officer:  \n";}

};

标签: c++unit-testing

解决方案


推荐阅读