0

クラスとバリデーターを作成したので、バリデーターのアサーションを使用していくつかのテストを行いたいと思いました。これは私が話していることです:

クラス医学

class Medicine{
private:
    int ID;
    string name;
public:
    Medicine(){
        this->ID=0;
        this->name="";
    }
    Medicine(int ID, string name, float concentration, int quantity){
        this->ID=ID;
        this->name=name;
    }
    ~Medicine(){};

    //inline get methods

    int getID(){
        return ID;
    }

    string& getName(){
        return name;
    }

    //inline set methods

    void setID(int newID){
        this->ID = newID;
    }

    void setName(string newName){
        this->name = newName;
    }
};

例外.h

#include <string>
using namespace std;

#include <string>
using namespace std;

class MyException
{
public:
    MyException(string msg):message(msg){}
    const string& getMessage() const {return message;}
private:
    string message;
};

class ValidatorException: public MyException
{
public:
    ValidatorException(string msg): MyException(msg){}
};

class RepositoryException: public MyException
{
public:
    RepositoryException(string msg): MyException(msg){}
};

薬バリデーター

#include "exceptions.h"
#include "medicine.h"

class MedicineValidator{
public:
    void validate(Medicine& m) throw (ValidatorException);
};

#include "medicineValidator.h"

void MedicineValidator::validate(Medicine& m) throw (ValidatorException){
    string message="";
    if(m.getID()<1){
        message+="The ID should be positive and >0!";
    }
    if(m.getName()==""){
        message+="The name field is empty, and it shouldn't!";
    }
    if(m.getConcentration()<1){
        message+="The concentration should be positive(>0)!";
    }
    if(m.getQuantity()<1){
        message+="The quantity should be positive(>0)!";
    }
}

バリデーターをテストするアルゴリズム:

void testValidator(){
    Medicine* m = new Medicine(1,"para",30,40);
    MedicineValidator* medValidator = new MedicineValidator();
    medValidator->validate(*m);

    m->setID(-2); //the ID should not be < 1 so it should catch the exception but the test fails
    try{
        medValidator->validate(*m);
        assert(false);
    }
    catch(ValidatorException& ex){
        assert(true);
    }
    delete m;
}

私は何を間違っていますか?間違いがわかりません...多分あなたはできるでしょう。:) プログラムを実行すると、次のようになります。「Assertion failed: false, file ..\src/utils/../domain/testMedicine.h, line 32

このアプリケーションは、異常な方法で終了するようランタイムに要求しました。詳細については、アプリケーションのサポート チームにお問い合わせください。」

4

1 に答える 1