Travis-CI的初步了解和测试程序的进一步编写
一. 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
#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的初步了解和测试程序的进一步编写的更多相关文章
- 使用 Travis CI 实现项目的持续测试反馈
		
[篇幅较长,10.15前补充完毕,如希望探索可直接移步Github仓库:https://github.com/SivilTaram/CITest] 在编程课中,我们可以使用成熟的在线评测系统来测试某个 ...
 - Travis CI用来持续集成你的项目
		
这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...
 - [转]Travis Ci的最接底气的中文使用教程
		
相信大家对Travis Ci已经不再陌生了,Github上已经有大部分的项目已经采用了它. Travis Ci是一个基于晕的持续集成项目,目前已经支持大部分主流语言了,如:C.PHP.Ruby.Pyt ...
 - 利用Travis CI 让你的github项目持续构建
		
Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins,GO的很明显的特别在于采用yaml格式,简洁清新独树一帜.目前大多数的github项目都已经移入到Travis CI的构建队列 ...
 - github Travis CI 持续集成
		
一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码.所以围绕开源做持续集成(Continuous Integration)变得 ...
 - 使用Travis CI自动部署Hexo博客
		
自从使用GitHub Pages和Hexo来发布博客之后,不得不说方便了许多,只需要几个简单的命令博客就发布了.但在不断的使用中发现每次的发布操作也挺耗时的. 我一般的操作是将平时整理好的md文件放到 ...
 - .NET Core+Selenium+Github+Travis CI => SiteHistory
		
前言 总是三分钟热度的我折腾了一个可以每天自动截取指定网站页面并保存到Github的项目SiteHistory,感觉挺好(每次都这样). 想知道YouTube今天的首页长啥样么?点此查看 想知道You ...
 - 使用Travis CI自动部署Hexo到GitHub
		
原文链接(转载请注明出处):使用Travis CI自动部署Hexo到GitHub 前言 使用 hexo + gitPages 搭建个人博客的人都知道,每当要发表一篇博文,第一步得手动使用 hexo g ...
 - Travis CI实现持续部署
		
安装Ruby 2.0以上版本并安装travis的命令行工具 可以看出我的已经是安装好的(Ubuntu 16.04.3 LTS 系统) ruby -v ruby --) [x86_64-linux-gn ...
 
随机推荐
- Android IOS WebRTC 音视频开发总结(二一)-- 黑屏问题
			
本文主要介绍音视频通话中收到第一帧图像后视频一直卡住的问题,文章来自博客园RTC.Blacker,转载请说明出处. 因为苹果AppStore要求从2015年2月1日开始所有所有上架App必须支持arm ...
 - Nginx 开启 path_info功能
			
server { listen ; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; roo ...
 - Linux程序分析工具:ldd和nm
			
ldd和nm是Linux下两个非常实用的程序分析工具.其中,ldd是用来分析程序运行时需要依赖的动态链接库的工具,nm是用来查看指定程序中的符号表信息的工具. 1 ldd 格式:ldd [option ...
 - php文件上传的例子
			
1.上传表单 upload.html 程序代码 [html] view plaincopy <form enctype="multipart/form-data" actio ...
 - Mysql varchar大小长度问题介绍
			
如果被 varchar 超过上述的 b 规则,被强转成 text 类型,则每个字段占用定义长度为 11 字节,当然这已经不是 varchar 了4.0版本以下,varchar(20),指的是20字节, ...
 - Java 装箱 拆箱
			
Java 自动装箱与拆箱 ??什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象的时候,我 ...
 - openstack的控制节点部署
			
openstack的控制节点部署 主要是使用了本地安装的那个镜像. 会出现几个问题, 1.重启服务无法启动. 2.环境变量无法正确配置可以自己配置
 - 【js & jquery】遮罩层实现禁止a、span、button等元素的鼠标事件
			
刚才在写一个界面,其中为了考虑背景图片的缘故,所以没用Button而是用的a标签 在点击之后应该禁用掉a元素,禁用对于button比较容易,加一个disabled就可以了 但是对于a却没有太好的办法, ...
 - 推荐一个sqlce,sqllite等数据库管理工具
			
推荐一个sqlce,sqllite等数据库管理工具 下载地址: http://fishcodelib.com/files/DatabaseNet4.zip 支持sqlserver,sqlce, sql ...
 - 删除字符串第一个byte
			
删除字符串第一个byte 一种方式: char * mag; char buff[1000]; char number; memcpy((char *)msg,buff,len); strnc ...