一. 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. leetcode 7

    此题实现比较简单,但是边界处理比较麻烦.题目要求是以32位考虑,所以可表达的数的范围是-2147483648~2147483648. 我们需要判断当前的数翻转之后是否在这个范围中,我的思路是首先对当前 ...

  2. 第六章_PHP数组

    1.PHP支持两种数组:索引数组(indexed array)和关联数组(associative array),前者使用数字作为键,后者使用字符串作为键. 2.遍历索引数组 2.1 for循环语句 2 ...

  3. linux下source命令的基本功能

    source命令用法:source FileName作用:在当前bash环境下读取并执行FileName中的命令.注:该命令通常用命令“.”来替代.如:source .bash_rc 与 . .bas ...

  4. IMAP收邮件

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. input实时监听(input oninput propertychange onpropertychange)

    本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时 ...

  6. Android计时器TimerTask,Timer,Handler

    Android计时器TimerTask,Timer,若要在TimerTask中更新主线程UI,鉴于Android编程模型不允许在非主线程中更新主线程UI,因此需要结合Android的Handler实现 ...

  7. C# 常用的dialogresult reset 以及if else 等检查获取客户操作信息的操作方法

    DialogResult reset; reset= MessageBox.Show("请检查您的输入信息是否按照规则输入的", "信息输入好像有问题哦", M ...

  8. JDBC基础二

    1.配置文件:dbinfo.properties driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/test user ...

  9. 开机一会,出现长时间闪屏,并且跳出SendRpt error

    通过谷歌,发现任务管理器中的Report sending utility 是属于TortoiseSVN 的,所以卸载svn ,然后重启就ok了

  10. Java 第七天 动态代理

    代理类需实现InvocationHandler接口: public interface InvocationHandler { public Object invoke(Object proxy,Me ...