一. Travis-CI部分

  最近基本都在研究Travis-CI的使用。CI是continue integration(持续集成)的缩写,Travis应该是给我们提供免费服务器的组织。下面介绍一下其使用方法。

  第一步,进入https://travis-ci.org用github账号登录进去,给其授权允许查看github上建立的仓库,可以看到github上建立的账号,选择要进行持续集成的仓库或是小组,点击仓库旁的service hook开关,可看见颜色变为绿色,至此,Travis-CI的设置基本完成;

  第二步,登录github网站,找到刚才选择进行持续集成的仓库,选择setting->webhook&services,点击add webhook,需要设置的主要是Payload URL,它代表的是当仓库收到一个push或是commit时,将该消息post给哪个地方,由于我们选择的是Travis-CI,故我填写的是https://travis-ci.org/kossle/仓库名,其他的不变,点击确定;

修改:经再次验证,该步骤不需要进行,它使用的是webhook&service中的service,只要在travis中设置后,可直接编写.travis.yml文件。

  第三,编写.travis.yml文件,昨天也试着将一些网上现成的较简单的代码copy一下,但错误太多,只能自己尝试写个简单的。

  简单解释:language:cpp  表示编程语言为c++;compilor: - gcc  表示采用gcc编译器;script: cd test && make 表示执行命令为打开test文件夹,然后make;然后需要编写makefile文件,由于之前对linux不太熟悉,花了一些时间才意识到make的前提是需要makefile文件存在,于是,测试了一个最简单的makefile文件。

  gcc之前的空格数是一个tab;

  结果如下:

  至此基本了解Travis-CI的使用过程,但想让它真正的用在小组的项目中,还有不少困难。尝试看了一下其他项目的.travis.yml文件的编写和官方文档以及makefile文件的编写。主要困难有:1.如要编写项目的makefile文件,应该至少知道整个项目*.h文件,*.cpp文件的关系,命名规则基本要确定;2.虽然了解一点持续集成的知识,但如要真编写.travis.yml文件,显然不够用;其他的方面应该没什么大的问题;

二.单元测试部分

  上次主要了解了cppunit的基本用法,这次主要就是又加了几个测试(frame类和joint类);没有什么新的知识,也没有在找frame类等bug上下什么功夫;简单的把代码贴上来。

 #include <cppunit/extensions/HelperMacros.h>
#include <Point.h> class testpoint :public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(testpoint);
CPPUNIT_TEST(testget);
//CPPUNIT_TEST(testrotate);
CPPUNIT_TEST_SUITE_END();
public:
void setUp();
void tearDown();
testpoint();
//~testsolver();
void testget();
//void testrotate();
};

test_point.h

 #include <cppunit/extensions/HelperMacros.h>
#include <Point.h>
#include <Frame.h> class testframe :public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(testframe);
CPPUNIT_TEST(testframeget);
//CPPUNIT_TEST(testrotate);
CPPUNIT_TEST_SUITE_END();
public:
void setUp();
void tearDown();
testframe();
//~testsolver();
void testframeget();
//void testrotate();
};

test_frame.h

 #include <cppunit/extensions/HelperMacros.h>
#include <Joint.h> class testjoint :public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(testjoint);
CPPUNIT_TEST(testjointget);
//CPPUNIT_TEST(testrotate);
CPPUNIT_TEST_SUITE_END();
public:
void setUp();
void tearDown();
testjoint();
//~testsolver();
void testjointget();
//void testrotate();
};

test_joint.h

test_frame.cpp
 #include "test_point.h"
#include "Point.h"
#include <string>
#include<iostream>
#include <cppunit/TestCase.h>
#include "cppunit/TestAssert.h" CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(testpoint, "alltest"); testpoint::testpoint()
{
}; void testpoint::setUp()
{
std::cout << "test point begin" << std::endl;
}; void testpoint::tearDown()
{
std::cout << "test point end" << std::endl;
}; void testpoint::testget()
{
Point point1(, );
int resultx = point1.getX();
int resulty = point1.getY();
CPPUNIT_ASSERT(resultx == );
CPPUNIT_ASSERT(resulty == );
}

test_point.cpp

 #include "test_joint.h"
#include "Joint.h"
#include <string>
#include<iostream>
#include <cppunit/TestCase.h>
#include "cppunit/TestAssert.h" CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(testjoint, "alltest"); testjoint::testjoint()
{
}; void testjoint::setUp()
{
std::cout << "test joint begin" << std::endl;
}; void testjoint::tearDown()
{
std::cout << "test joint end" << std::endl;
}; void testjoint::testjointget()
{
Joint joint1(, );
double a = joint1.getDeg1();
//int resulty = point1.getY();
//int c = result.getX()
CPPUNIT_ASSERT(a == 3.0);
//CPPUNIT_ASSERT(result.getY() == 4);
}

test_joint.h

 #include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/TextOutputter.h> int main()
{
CppUnit::TestResult r;
CppUnit::TestResultCollector rc;
r.addListener(&rc); // 准备好结果收集器 CppUnit::TestRunner runner; // 定义执行实体
runner.addTest(CppUnit::TestFactoryRegistry::getRegistry("alltest").makeTest());
runner.run(r); // 运行测试 CppUnit::TextOutputter o(&rc, std::cout);
o.write(); // 将结果输出 system("pause"); return rc.wasSuccessful() ? : -;
}

testmain.cpp

  结果如下:

  从实际的测试可以看出,testmain.cpp在我不断添加测试包时,不需要改动,只需要将新写的测试类注册到“alltest”即可;另外,solver类本身就有问题,没法测试通过;至此,robot类就简单测试到这里(若solver类等有改动,再测试);因为这些类都比较简单,没什么bug,就先测试到这。下一步测试一下coffee类

Travis-CI的初步了解和测试程序的进一步编写的更多相关文章

  1. 使用 Travis CI 实现项目的持续测试反馈

    [篇幅较长,10.15前补充完毕,如希望探索可直接移步Github仓库:https://github.com/SivilTaram/CITest] 在编程课中,我们可以使用成熟的在线评测系统来测试某个 ...

  2. Travis CI用来持续集成你的项目

    这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...

  3. [转]Travis Ci的最接底气的中文使用教程

    相信大家对Travis Ci已经不再陌生了,Github上已经有大部分的项目已经采用了它. Travis Ci是一个基于晕的持续集成项目,目前已经支持大部分主流语言了,如:C.PHP.Ruby.Pyt ...

  4. 利用Travis CI 让你的github项目持续构建

    Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins,GO的很明显的特别在于采用yaml格式,简洁清新独树一帜.目前大多数的github项目都已经移入到Travis CI的构建队列 ...

  5. github Travis CI 持续集成

    一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码.所以围绕开源做持续集成(Continuous Integration)变得 ...

  6. 使用Travis CI自动部署Hexo博客

    自从使用GitHub Pages和Hexo来发布博客之后,不得不说方便了许多,只需要几个简单的命令博客就发布了.但在不断的使用中发现每次的发布操作也挺耗时的. 我一般的操作是将平时整理好的md文件放到 ...

  7. .NET Core+Selenium+Github+Travis CI => SiteHistory

    前言 总是三分钟热度的我折腾了一个可以每天自动截取指定网站页面并保存到Github的项目SiteHistory,感觉挺好(每次都这样). 想知道YouTube今天的首页长啥样么?点此查看 想知道You ...

  8. 使用Travis CI自动部署Hexo到GitHub

    原文链接(转载请注明出处):使用Travis CI自动部署Hexo到GitHub 前言 使用 hexo + gitPages 搭建个人博客的人都知道,每当要发表一篇博文,第一步得手动使用 hexo g ...

  9. Travis CI实现持续部署

    安装Ruby 2.0以上版本并安装travis的命令行工具 可以看出我的已经是安装好的(Ubuntu 16.04.3 LTS 系统) ruby -v ruby --) [x86_64-linux-gn ...

随机推荐

  1. 001Linux命令

    1.删除非空目录的命令:rm -rf [目录名],r表示迭代,f表示强制: 删除空目录:rmdir [目录名]: 删除文件:rm [文件名]: 2.用户管里类命令: (1)添加用户:useradd [ ...

  2. 打地鼠游戏ios源码

    打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款 ...

  3. set 赋值(转载)

    名著<C#设计模式>第9章“观察者模式”涉及了标准的事件处理流程,作者在探讨属性值变更时给出一个如下示例代码(P73-74): pulbic abstract class TpeakFun ...

  4. 《第一行代码--Android》阅读笔记之数据持久化

    1.升级数据库 为了避免手工清空数据(或卸载重装APP),重写SQLiteOpenHelper里面的onUpgrade()方法   引用自http://blog.csdn.net/longvslove ...

  5. Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)

    E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended 也可以在nuget上直接安装这个包 1.先更新VS的NuGet版本http: ...

  6. 原生jdbc执行存储过程

    //定时任务,结转 . //表名 fys_sch_lvyou2 ,存储过程名:fys_sch_lvyou2_carrayover //无参调用:{call insertLine} //有参调用:{ca ...

  7. php读取文件时多了个%uFEFF[bom字符],怎样去掉?

    今天从记事本文件中读取静态生成记录时,发现读出来的第一个链接打开的时候总是提示非法操作,把鼠标放到链接上发现链接的前面多了个%uFEFF, 百度一查,原来这是好多人都有遇到过的bom头问题,特地记录下 ...

  8. sendBroadcast 无法接收

    项目中遇到已经sendbroadcast,但是在对应的BroadcastReceiver中却无法调用onReceiver 真是个纠结的问题.找了许久. 终于发现Intent中传递了一个参数(自定义类继 ...

  9. MySql中把一个表的数据插入到另一个表中的实现代码

    web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以在程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量代码 ...

  10. DevExpress 中 在做全选的全消功能的时候 加快效率

    在做 DevExpress 中对增加的选择 Check列 控制全选的全消时通过以下代码红色字代码效率会有明显的提升: private void CheckedRow() { try { splashS ...