ユニットテストクラスの場合、共同作業者のパブリックインターフェイスに対してのみテストする必要があります。ほとんどの場合、これは共同作業者を偽のオブジェクト(モック)に置き換えることで簡単に実現できます。依存性注入を適切に使用する場合、これはほとんどの場合簡単です。
ただし、ファクトリクラスをテストしようとすると、事態は複雑になります。例を見てみましょう
モジュールwheel
class Wheel:
"""Cars wheel"""
def __init__(self, radius):
"""Create wheel with given radius"""
self._radius = radius #This is private property
モジュールengine
class Engine:
"""Cars engine"""
def __init(self, power):
"""Create engine with power in kWh"""
self._power = power #This is private property
モジュールcar
class Car:
"""Car with four wheels and one engine"""
def __init__(self, engine, wheels):
"""Create car with given engine and list of wheels"""
self._engine = engine
self._wheels = wheels
さあ、CarFactory
from wheel import Wheel
from engine import Engine
from car import Car
class CarFactory:
"""Factory that creates wheels, engine and put them into car"""
def create_car():
"""Creates new car"""
wheels = [Wheel(50), Wheel(50), Wheel(60), Wheel(60)]
engine = Engine(500)
return Car(engine, wheels)
次に、の単体テストを作成しCarFactory
ます。テストしたいのですが、ファクトリはオブジェクトを正しく作成します。ただし、オブジェクトのプライベートプロパティは将来変更される可能性があり、テストに失敗する可能性があるため、テストしないでください。想像してWheel._radius
みWheel._diameter
てEngine._power
くださいEngine._horsepower
。
では、工場をテストする方法は?