当前位置: 代码迷 >> 综合 >> 新手女程序员的毕业启程感悟含单元测试经历
  详细解决方案

新手女程序员的毕业启程感悟含单元测试经历

热度:8   发布时间:2024-02-13 05:56:43.0

      ( 文章末尾附有单元测试例子  )     

       作为一个本科专业是电子信息工程的女生来说,毕业找本行工作是争议很大的事情。大学没有过硬的专业知识水平,甚至说是混过来的。刚来公司时前上司因为正急着一个项目加上我水平不够所以前上司安排我自己学习看书,看了两个月放假回家,疫情原因三月下旬才继续。后来项目负责人换了,也就换了个上司,我三月份一来他很开心,给我安排了系统测试的工作。可能有的人说这工作谁都能做,不写代码做这个太亏了,可是我觉得即使是测试也比我天天看书来的踏实。小公司就是这样,人少事情多,不限定你只做同一件事情。

       做了将近两个月的系统测试,很充实,上司对我也很好,也正是因为表现不错,上司决定留用我,几次问我什么时候毕业,早点签合同。公司虽然不是大公司,但是在职的几位程序员资历最浅的也是交大毕业两年多和研究生毕业两年的,高的就是留学回来的算法工程师和交大博士。这么一看我一个普通二本毕业的能留下来完全是上司给机会。上司的意思是我干活仔细认真,至于留下来干什么我自己选择,测试还是代码都可以,总之他愿意培养我这个新人。然后项目接近尾声加上公司来了个资深测试新员工,我就慢慢不做测试,转看项目代码学习写代码。前两篇就是在准备写ui时自学习时记录的。过程坎坷,上司兄弟负责另一个项目,急缺人手,就叫我帮忙了,但因为我很多都不懂,就先叫我写单元测试。新来的算法工程师跟我说,写单元测试是写代码的基础,交大毕业的那位前辈刚来公司也写过单元测试,在心里我也就慢慢接受了写单元测试。

       接下来,就开始写单元测试代码,说难也不是很难,说简单也不是很简单(也可能是我太笨了)。我们是用C++,写的过程中需要有一定的基本功底。由于知识掌握不精(大学并没有开这门课程,后来才接触了一点),所以开始一个任务交代下来啥啥都写不好,一个函数能卡好几天。好在他带我的时候也还有耐心,我不敢问他就经常来问我写的怎么样有没有什么不会的(其实新人有这种状态并不好,还是要多学多问积极一点)。他是跳槽来的,有十几年工作经验,之前带的也都是有几年经验的,像我这种还是头一个,所以经常会有我不能理解他的意思的时候,经常感觉交流不在一个层面。算是比较幸运,即使这么菜还是有人愿意带我,我爸爸说可能还是因为我是女生。作为一个职场人,我这种心态是很不好的,不积极不主动还不学习。在上司愿意给我机会培养我时,我就应该好好学习并且积极帮助团体。也只有积极学习,才能成长地更快,工资才能涨得快。所以,新手们一定要多学多问,既然选择了这行,就需要有自我沉淀的毅力。

      最后说一下写单元测试的感受吧(我也只是暂时写一下这个单元测试),我百度过,单元测试属于白盒测试的范畴,也是代码里很关键的一部分。主要是针对各类各函数的结果进行测试,检查是否达到了预期的要求。上一段例子吧:

下面是被测试函数:

bool StudyDAO::updateAccessDate(int id)
{
QSqlQuery query;
// use parameter binding to avoid SQL injection attack
query.prepare("update study set lastAccessDate = :lastAccessDate where id = :id");
query.bindValue(":id", id);
query.bindValue(":lastAccessDate", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));

    bool ret = query.exec();

    if (!ret) {
UEGNAV_ERROR_FMT("failed to update study access date, reason: %s.",
query.lastError().text().toUtf8().constData());
}

    return ret;
}

这是我写的测试函数:

void TestStudyDAO::testUpdateAccessDate()
{
StudyDAO studyDAO;

auto studies = studyDAO.find("126");
int num = studies[0].getId();

    auto ret = studyDAO.updateAccessDate(num);
StudyModel studyModel = studyDAO.find("126")[0];        //call once again after update time

QVERIFY(ret);

QDateTime begin = QDateTime::currentDateTime();
QDateTime end = QDateTime::fromString(studyModel.getLastAccessDateTime(), "yyyy-MM-dd hh:mm:ss");

int gap = begin.secsTo(end);                            //the secsTo function return seconds from begin to end
QVERIFY(gap == 0);
}

验证的是更新函数,为了更精确,还验证了更新后的时间是否是当前的时间。QVERIFY即是验证,QVERIFY(ret)是验证函数返回值,QVERIFY(gap == 0)是验证时间差,其实我一开始并不知道时间差值为0,理论上应该是。调试后得知gap值为0才写了那么一句。

我发现百度上很多单元测试和我这个不一样,就单纯分享一下,有问题还请留言。