Quick search

Unit tests(翻訳済み)

テストはkivy / testsフォルダにあります。 Kivyでバグを発見した場合は、問題を示す最小限のケースを記述して表示された動作が意図されているかどうかをコアデベロッパーに問い合わできます。`unittest <http://docs.python.org/2/library/unittest.html>`としてコードを書くとバグが将来気付かれずに戻ってくるのを防ぎ、Kivyをより良くより強力なプロジェクトにします。unittestを書くことは役立つことをしながらKivyに慣れるためには本当に良い方法なのかもしれません。

ユニットテストは2つのケースに分かれています:

  • 非グラフィカルユニットテスト:これはコンソールで実行できる標準的なユニットテストです

  • グラフィカルユニットテスト:これらはGLコンテキストが必要であり、画像比較を介して作業します

単体テストを実行できるようにするには、nose(http://code.google.com/p/python-nose/)とcoverage(http://nedbatchelder.com/code/coverage/)をインストールする必要があります。インストールするためにeasy_installを使うことができます:

sudo easy_install nose coverage

次にkivyディレクトリで:

make test

How it works(使い方)

すべてのテストは「kivy / tests」にあり、ファイル名は「test_ <name> .py」で始まります。noseは自動的にこのフォルダ内のすべてのファイルとクラスを収集し、テストケースを生成するために使用します。

テストを書くには、以前の命名を尊重したファイルを作成し、次にこのテンプレートで始めます:

import unittest

class XXXTestCase(unittest.TestCase):

    def setUp(self):
        # import class and prepare everything here.
        pass

    def test_YYY(self):
        # place your test case here
        a = 1
        self.assertEqual(a, 1)

XXXをテストケースをカバーする適切な名前に置き換えて、「YYY」をテストの名前に置き換えます。疑問がある場合は他のテストがどのように書かれているかを確認してください。

実行するには、次のコマンドを実行します:

make test

そのファイルだけを実行したい場合は、以下を実行できます:

nosetests kivy/tests/test_yourtestcase.py

GL unit tests

GLユニットテストはより困難です。 OpenGLが標準であっても、出力/レンダリングは標準ではありません。それは使用しているGPUとドライバによって異なります。これらのテストの目的はフレームXでのレンダリングの出力を保存してリファレンス画像と比較することです。

現在、画像は320x240ピクセル(png形式)で生成されています。

注釈

現在、画像の比較はピクセルごとに行われます。これは、生成する参照画像がGPU /ドライバに対してのみ正しいことを意味します。誰かが “デルタ”サポートで画像比較を実装できるのであれば、パッチは歓迎します:)

GLユニットテストを実行するには、ディレクトリを作成する必要があります:

mkdir kivy/tests/results
make test

resultsディレクトリには、すべてのリファレンスイメージと生成されたイメージが含まれます。最初の実行後、resultsディレクトリが空の場合、比較は行われません。生成された画像をリファレンスとして使用します。2回目の実行後、すべてのイメージがリファレンスイメージと比較されます。

htmlファイルを使用して、テストの前後の比較と関連ユニットテストのスニペットを表示できます。それは次の場所で生成されます:

kivy/tests/build/index.html

注釈

ビルドディレクトリはmake testの呼び出しのたびに消去されます。あなたがそれを望まないなら、nosetestsコマンドを使用してください。

Writing GL Unit tests(GL Unit testの書き方)

このアイデアは、build() や kivy.base.runTouchApp() のようにroot widgetを作成することです。 root widgetでレンダリング関数に渡し、出力されたXフレームをキャプチャします。

次に例を示します:

from common import GraphicUnitTest

class VertexInstructionTestCase(GraphicUnitTest):

    def test_ellipse(self):
        from kivy.uix.widget import Widget
        from kivy.graphics import Ellipse, Color
        r = self.render

        # create a root widget
        wid = Widget()

        # put some graphics instruction on it
        with wid.canvas:
            Color(1, 1, 1)
            self.e = Ellipse(pos=(100, 100), size=(200, 100))

        # render, and capture it directly
        r(wid)

        # as alternative, you can capture in 2 frames:
        r(wid, 2)

        # or in 10 frames
        r(wid, 10)

「self.render」(またはこの例では「r」)を呼び出すたびに、次の名前の画像が生成されます:

<classname>_<funcname>-<r-call-count>.png

「r-call-count」は、「self.render」がテスト関数内で呼び出された回数を表します。

リファレンス画像の名前は次の通りです:

ref_<classname>_<funcname>-<r-call-count>.png

必要に応じて、リファレンス画像を新しい画像に簡単に置き換えることができます。

Coverage reports(Coverageレポート)

カバレッジは以前のテストの実行に基づいています。コードカバレッジに関する統計は、実行中に自動的に計算されます。コマンドでカバレッジのhtmlレポートを生成することができます:

make cover

次にお気に入りのウェブブラウザでkivy / htmlcov / index.htmlを開きます。