簡體   English   中英

刪除/覆蓋導入

[英]Remove/overwrite import

我正在嘗試使用unittest為介紹CS類設置一個評分腳本。 本質上,學生提交一個python文件student.py ,其中包含一些通常相互依賴的函數(意味着func3()可能在其計算中使用func1() )。

我正在為每個方法編寫單元測試,方法是將student.func1的輸出與correct.func1的輸出進行比較,該方法已知是正確的實現方法(來自文件correct.py )。

舉個例子,假設func2在它的計算中使用了func1 因此,默認情況下或者在student.func1未通過某些測試時,我想用correct.func1覆蓋student.func1 ,因此student.func2使用已知的正確實現(因此默認情況下不是錯誤的)。 我怎么能這樣做呢? 似乎setUp()tearDown()類似於我想要的,但我不知道如何在python中“unmport”模塊,到目前為止還沒有找到任何關於它的資源。

我對student.py包含類, func1func2是特定類的方法,以及func1func2通常只在student.py定義的情況感興趣。

最簡單的方法是將student導入您的模塊,然后在測試失敗時捕獲AssertionError ,並用您自己的好代碼替換學生模塊中的錯誤代碼:

import student

import unittest

def safe_f1():
    print("Safe f1")
    return 1

class TestSomething(unittest.TestCase):

    def test_f1(self):
        try:
            self.assertEqual(student.func1(), 1)
        except AssertionError:
            student.func1 = safe_f1
            raise


    def test_f2(self):
        self.assertEqual(student.func2(), 2)

這是一個失敗/工作的虛擬student.py:

def func1():
    print("Bad f1")
    return 2

def func2():
    return func1() + 1
    return 2

當我運行這個時,我得到:

$ python -m unittest test.py
Bad f1
FSafe f1
.
======================================================================
FAIL: test_f1 (test.TestSomething)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/austin/Code/so/test.py", line 13, in test_f1
    self.assertEqual(student.func1(), 1)
AssertionError: 2 != 1

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM