2011-02-01 7 views
4

異なる関数(たとえばMeasureRadius)からの入力を取得するPythonコードをテストしたいと思います。 MeasureRadiusはまだ受信していない計測器に依存しているため、準備ができていません。 iRadiusで異なる値でCalculateAreaをテストし、MeasureRadiusからiErrorCodeを出力する最良の方法は何ですか?自動化された方法がいいだろう。 unittestを使用するつもりでしたが、MeasureRadiusから返されたiRadiusとiErrorCodeをどのように変更するのか分かりません。Pythonコードのテスト

class Instrument(): 
def MeasureRadius(self): 
    iErrorCode = 0 
    sErrorMsg = "" 
    iRadius = 0 
    try: 
     #tell the instrument to measure param A, the measurement goes into iRadius param 
     #iRadius = Measure() 

    except: 
     sErrorMsg = "MeasureRadius caught an exception." 
     iErrorCode = 1 
    return iRadius, iErrorCode, sErrorMsg 

def CalculateArea(): 

"""calculate area from the measured radius. Returns area, error code, error message""" 

    iRadius, iErrorCode, sErrorMsg = Instrument.MeasureRadius() 
    if iErrorCode != 0: 
     return 0.0,iErrorCode, sErrorMsg 
    if iRadius <1 : 
     return 0.0,1, "Radius too small." 
    fArea = 3.14*iRadius*iRadius 
    return fArea,0,"" 
+2

あなたのインデントは読みにくいです。少なくとも3つのスペース。理想的には4.大文字の名前を持つ 'def MeasureRadius'メソッド関数がありますが、これも悪い考えです。 –

答えて

4

Instrumentクラスに替わる「モックフィクスチャー」が必要です。

CalculateAreaも再テストする必要があります。

def CalculateArea(someInstrument): 
    iRadius, iErrorCode, sErrorMsg = someInstrument.measureRadius() 
    # rest of this is the same. 

class MockInstrument(object): 
    def __init__(self, iRadius, iErrorCode, sErrorMsg): 
     self.iRadius= iRadius 
     self.iErrorCode= iErrorCode 
     self.sErrorMsg= sErrorMsg 
    def measureRadius(self): 
     return self.iRadius, self.iErrorCode, self.sErrorMsg 
class TestThisCondition(unittest.TestCase): 
    def setUp(self): 
     x = MockInstrument(some set of values) 
    def test_should_do_something(self): 
     area, a, b = CalculateArea(x) 
     assert equality for the various values. 
関連する問題