2015-02-27 17 views
5

Raspyberry Pi programını python kullanarak yapıyorum. Python kodumun unittest numarasını yazmak istiyorum. GPIO'un çıkış durumunu nasıl alabilirim? Hedef sınıfın sınıfı aşağıdaki gibidir:Python'da ahududu pi'nin GPIO çıktı değeri nasıl hesaplanır

Durdur, fren, saat yönünün tersine ve rotateCounterClockwise tuşlarına basıldıktan sonra çıkışları kontrol etmek istiyorum. Eğer RPi.GPIO kütüphane güveniyorsanız

import RPi.GPIO as GPIO 
# moter management class, with like TA7291P 
class MoterManager: 
    def __init__(self, in1Pin, in2Pin): 
     self.__in1Pin = in1Pin 
     self.__in2Pin = in2Pin 

    def stop(self): 
     self.__offIn1() 
     self.__offIn2() 

    def brake(self): 
     elf.__onIn1() 
     self.__onIn2() 

    def rotateClockwise(self): 
     self.__onIn1() 
     self.__offIn2() 

    def rotateCounterClockwise(self): 
     self.__offIn1() 
     self.__onIn2() 

    def __onIn1(self): 
     GPIO.output(self.__in1Pin, True) 
     print "In1 on" 

    def __onIn2(self): 
     GPIO.output(self.__in2Pin, True) 
     print "In2 on" 

    def __offIn1(self): 
     GPIO.output(self.__in1Pin, False) 
     print "In1 off" 

    def __offIn2(self): 
     GPIO.output(self.__in2Pin, False) 
     print "In2 off" 
+0

Geç kalmazsam, dün size bir yanıt gönderdim. –

cevap

2

, bunun iyi belirten noktası yapabilirsiniz patch it by unittest.mock framework olduğunu düşünüyorum. patchRPi.GPIO.output, bağımlılığı HW'den ayırma ve çağrıları bu işleve göre algılama olanağı verir.

test sınıfı

import unittest 
from unittest.mock import patch, call 
from my_module import MoterManager 

@patch("RPi.GPIO.output", autospec=True) 
class TestMoterManager(unittest.TestClass): 
    in1Pin=67 
    in2Pin=68 

    def test_init(self, mock_output): 
     """If you would MoterManager() stop motor when you build it your test looks like follow code""" 
     mm = MoterManager(self.in1Pin,self.in1Pin) 
     mock_output.assert_has_calls([call(self.in1Pin, False),call(self.in2Pin, False)],any_order=True) 

    def test_stop(self, mock_output): 
     mm = MoterManager(self.in1Pin,self.in1Pin) 
     mock_output.reset_mock 
     mm.stop() 
     mock_output.assert_has_calls([call(self.in1Pin, False),call(self.in2Pin, False)],any_order=True) 

    def test_brake(self, mock_output): 
     mm = MoterManager(self.in1Pin,self.in1Pin) 
     mock_output.reset_mock 
     mm.stop() 
     mock_output.assert_has_calls([call(self.in1Pin, True),call(self.in2Pin, True)],any_order=True) 

    def test_rotateClockwise(self, mock_output): 
     mm = MoterManager(self.in1Pin,self.in1Pin) 
     mock_output.reset_mock 
     mm.stop() 
     mock_output.assert_has_calls([call(self.in1Pin, True),call(self.in2Pin, False)],any_order=True) 

    def test_rotateCounterClockwise(self, mock_output): 
     mm = MoterManager(self.in1Pin,self.in1Pin) 
     mock_output.reset_mock 
     mm.stop() 
     mock_output.assert_has_calls([call(self.in1Pin, False),call(self.in2Pin, True)],any_order=True) 

Az notlar olabilir

: Ben hemen hemen her testte autospec=True kullanıyorum pip yerine

  • unittest.mock ait

    piton-2.7 Kullanımda
    • mock mevcut tarafından merak ediyorsanız neden bir göz atın this
    • Testlerim kodunuzda yaklaşık 1 hata kaldıracaktır: yazım hatası brake yöntemiyle yazım hatası
  • İlgili konular