【问题标题】:Test with mock for a function in python用模拟测试python中的函数
【发布时间】:2017-08-04 06:10:58
【问题描述】:

对于测试覆盖率,我还想测试文件“signalC”中此函数的异常块:

 class SignalC:
    def readSignal(self, a):
    try:
        with open(os.path.join(self.newSubFolder, "my file" + '.csv'), 'a') as csvfile:
            writer = csv.writer(csvfile, delimiter=',', quotechar='|',
                                quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
            print 'Reading'
            z = random.uniform(-0.1, 0.1)
            readValue = z + setP[element]

            writer.writerow([self.element + '-' + str(element+1),)
    except IOError as message:
        logging.error('Error in writing the csv file ' + str(message))
        print(message.strerror)
        raise IOError

到目前为止,我尝试了这种方法,但仍然无法进入异常块:

def testReadSignal(self):
    sc = signalC.SignalC()
    a = [1, 1, 1]
    with mock.patch("signalC.SignalC.readSignal", side_effect=IOError("IOError")):
        self.assertRaises(IOError, sc.readSignal, a)

或者我应该用错误的输入引发异常?谁能举个例子?提前致谢

【问题讨论】:

    标签: python unit-testing exception mocking


    【解决方案1】:

    您似乎想创建一个SignalC 的实例,然后调用该readSignal 方法。因此,您不应该修补该方法本身 ("signalC.SignalC.readSignal"),因为这意味着它会被模拟,并且您不会调用该方法的真正实现。

    例如,您可以在调用open 时提高IOError:

    def testReadSignal(self):
        sc = signalC.SignalC()
        a = [1, 1, 1]
        with mock.patch("signalC.open", side_effect=IOError("IOError")):
            self.assertRaises(IOError, sc.readSignal, a)
    

    【讨论】:

    • 非常感谢!我不知道为什么我没有考虑打开引发错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 2023-04-04
    • 1970-01-01
    • 2015-09-16
    • 2021-09-10
    • 2015-11-13
    相关资源
    最近更新 更多