关于如何从系统环境中检索用户名的TDD应用程序的想法

时间:2010-08-04 18:41:07

标签: tdd

对于需要访问操作系统系统变量的应用程序的TDD方面,您通常如何?

例如,我的应用程序需要能够正确检索操作系统当前登录的用户名。

所以我TDD是一个执行此操作的函数,它被称为:

string getUserNameFromSystemEnvironment();

我遇到的问题是:

我正在我的机器上运行测试,所以我知道用户名是什么(比如FooBar)。我通过在我的测试中硬编码getUserNameFromSystemEnvironment()来TDD FooBar

EXPECT_EQ(getUserNameFromSystemEnvironment(), "FooBar");

显然,这个测试在我的机器上运行正常,但在其他机器上运行不正常。为了使它在正常运行 但是,其他人,我需要使用getUserNameFromSystemEnvironment()。但是,那种方式会破坏测试的目的,因为我们会:

EXPECT_EQ(getUserNameFromSystemEnvironment(), 
          getUserNameFromSystemEnvironment());

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

如果要查看此内容,则需要设置模拟。创建一个返回用户ID的接口,一个调用getUserNameFromSystemEnvironment()的实现,以及一个返回告诉它返回的字符串的模拟。

但那不是你想要做的。如果您尝试测试getUserNameFromSystemEnvironment(),那么您将有效地测试操作系统功能。您不需要测试其他人的代码。相反,将getUserNameFromSystemEnvironment()放入接口,并模拟系统的其他部分。然后,例如,要测试LoginValidator,传入一个将usename作为“Foobar”返回的模拟,并验证它是否验证了登录。然后添加一个测试,该测试返回一个不应验证的用户名,并验证它是否不允许它进入。

答案 1 :(得分:2)

确保价值回归,您并不总是需要知道确切的价值。

  • 检查类型是否为字符串。
  • 检查它是否为空或空。

测试不需要100%完美,他们只需要增加您对代码的信心。