您所描述的所有三种情况都需要专门解决,以确保在设计中使用松散耦合。
您是否 真的 需要对Python的
raw_input方法进行单元测试?该
open方法?
os.environ.get?没有。
您需要设置您的设计,以便您可以替代其他方法来检索该输入。然后,在单元测试期间,您将抛出实际上并没有调用
raw_input或的某种类型的存根
open。
例如,您的常规代码可能类似于:
import osdef say_hello(input_func): name = input_func() return "Hello " + namedef prompt_for_name(): return raw_input("What is your name? ")print say_hello(prompt_for_name)# Normally would pass in methods, but lambdas can be used for brevityprint say_hello(lambda: open("a.txt").readline())print say_hello(lambda: os.environ.get("USER"))会话看起来像:
请问你贵姓大名?有人你好您好[部分文字]你好标记
然后您的测试将像:
def test_say_hello(): output = say_hello(lambda: "test") assert(output == "Hello test")
请记住,您不必测试一种语言的IO功能(除非您是设计该语言的人,这完全是另一回事)。



