ググってやってみたけど、いろいろとハマりポイントあったので参考までに書きます
クラスがある場合、クラスがない場合それぞれのユニットテスト.
unittest : Pythonの標準テスト機構。
import unittest って書くだけで使える。
テストしたいファイル
calc.py :計算結果を返してくれるモジュール
say.py :聴衆が叫んでくれるモジュール
成功例(コピペすれば実行できます)
ファイル構成
python
┣ Actual(実際のコード)
┃ ┣ __init__.py ハマりポイント1で解説
┃ ┣ calc.py (クラスがないファイル)
┃ ┗ say.py (クラスがあるファイル)
┗ Test(テストコード)
┣ __init__.py ハマりポイント1で解説
┗ testSayAndCalc.py (ほんとはファイルごとに分けるべき)
実際のファイル
#中身空でOK
def hikizan(a,b):
return a-b
class Hoge:
def sayFoo(self):
return "audience:Foo"
def say(self,a,b):
return "audience:" + a+b
from unittest import TestCase
from Actual.say import Hoge
import os
import sys
path = os.path.join(os.path.dirname(__file__), '../')
sys.path.append(path)
import Actual.calc
class unittest(TestCase):
def test_say(self):
self.assertEqual(Hoge.sayFoo(self), 'audience:Foo')
#ココだけわざと間違えてるのでテストエラーになる予定
self.assertEqual(Hoge.say(self,"Yo","Ho"),"audience:YooHo")
def test_calc(self):
self.assertEqual(Actual.calc.hikizan(4,3),1)
実行方法
PS C:python> python -m unittest Test.testSayAndCalc
実行結果
.F
======================================================================
FAIL: test_say (Test.testSayAndCalc.unittest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:python\Test\testSayAndCalc.py", line 14, in test_say
self.assertEqual(Hoge.say(self,"Yo","Ho"),"audience:YooHo")
AssertionError: 'audience:YoHo' != 'audience:YooHo'
- audience:YoHo
+ audience:YooHo
? +
無事、テストを走らせることができました。
ハマりポイント
ハマりポイント1: 別階層のモジュールimportができない
そして他階層にあるモジュールのインポートは容易にはできないのかhttps://t.co/kP2SuJuCxw
— 筋Tech (@workoutholic1) 2018年11月17日
別階層のモジュールを読み込む場合、import元と先に
1. __init__.py を配置
2. import前に以下を書き込む
import os
import sys
path = os.path.join(os.path.dirname(__file__), '../')
sys.path.append(path)
import Actual.calc(importしたいモジュールを親階層から書く)
ハマりポイント2: いつものpython XXX.py では実行できない
いつものように実行するとエラーになります。
1. 親階層に行くファイル構成 の場合、pythonディレクトリ以下でコマンドを打つ必要があります
2. python -m unittest Test.testSayAndCalc
でテスト実行する
Testディレクトリ内すべてのテストを実行したい場合は python -m unittest discover Test
クラスがうまくimportできない、とか、
Module 'unittest' has no 'main' member
Module 'unittest' has no 'Testcase' member
などいろいろエラーでたが、成功例(コピペすれば実行できます) をきちんとコピペすれば解消できるはず。
以上となります