空飛ぶロボットのつくりかた

ロボットをつくるために必要な技術をまとめます。ロボットの未来についても考えたりします。

rosでテストを書いてみる

unittest

CMakeLists.txt

catkin_python_setup()

if(CATKIN_ENABLE_TESTING)
  find_package(rostest REQUIRED)
  add_rostest(test/mytest.test)
endif()

package.xml

<test_depend>rostest</test_depend>
<test_depend>python-nose</test_depend>

↑テストにnoseをつかう場合

mytest.test

<launch>
  <node pkg="mypkg" type="mynode" name="mynode" />
  <test test-name="test_mynode" pkg="mypkg" type="test_mynode.py" />
</launch>

test_mynode.py

#!/usr/bin/env python

from nose.tools import eq_, raises

import unittest
import rostest, rospy

from mypkg.mytest import MyTest


class TestMyTest(unittest.TestCase):
    def setUp(self):
        pass

    @raises(rospy.ROSException)
    def test_mytest1(self):
        instance = MyTest()
        
    def test_mytest2(self):
        eq_(10 / 5, 2)

if __name__ == '__main__':
    rospy.init_node('test_sample')
    rostest.rosrun('mypkg',
                   'test_sample',
                   TestMyTest)

実行

$rostest test_rospy/test/mytest.test

setup.py

#!/usr/bin/env python
# Copyright (C) 2016 Toyota Motor Corporation

from distutils.core import setup

from catkin_pkg.python_setup import generate_distutils_setup

setup_args = generate_distutils_setup(
    packages=['rostest'],
    package_dir={'': 'src'},
)

setup(**setup_args)

rostest-test.test

<launch>
  <test test-name="test_rostest" pkg="rostest" type="test_rostest.py" />
</launch>

ディレクトリ構成

/src/rostest/src/rostest/~.py

参考:

ja/rospy_tutorials/Tutorials/Makefile - ROS Wiki

2. setup スクリプトを書く — Python 3.6.1 ドキュメント

参考:

ROS勉強記録: catkinでのpythonのtestについて

ROS C++コード用テストライブラリgtestの使い方(日本語訳) - MyEnigma

rostest - ROS Wiki

rostest - Minimum Working Example - ROS Answers: Open Source Q&A Forum

nose まとめ 1 - kuma8の日記

noseで気軽にテストを書く(+geventの場合) - Qiita

Pythonのデコレータについて - Qiita

ROSにおけるUnit/Integration/Regression Test (日本語訳) - MyEnigma

「rostest」 の使い方 - うごくものづくりのために

google test のインストールでハマったのでメモ - Qiita