TDD用于中等复杂度方法

时间:2009-03-09 11:54:50

标签: unit-testing tdd

我已经与TDD脱节了一段时间,而且非常生疏。我对如何TDD下面描述的方法有一些建议。

该方法必须在用户提供的应用程序目录中找到web.config文件。然后它必须从该配置文件中提取并返回一个连接字符串。

如果由于任何原因找不到连接字符串,它返回null,无论是坏路径,没有web.config,还是web.config中没有连接字符串。

我最初的想法是使用setup创建一个目录,并使用连接字符串写入web.config文件。然后,测试将使用创建的路径调用我的方法,并期望返回非null值,并且我的初始测试运行将失败,因为我的方法存根总是返回null。

然后,实现该方法,并运行期望传递的测试。然后,作为预测试(我忘记了术语),删除创建的目录,并调用期望空值的方法。

4 个答案:

答案 0 :(得分:4)

首先,我不会让方法同时找到文件并提取连接字符串。如果您的框架还没有确定给定目录中是否存在文件的方法,那么编写一个方法,一旦有了文件,就编写一个方法从开放流中提取连接字符串。然后,为了进行测试,您可以提供内存流,而不必实际创建目录和文件。

其次,如果您不依赖于编译失败是第一次失败的测试,那么请首先尝试该方法以抛出NotImplementedException。这是一小步,但是当你编写第一个测试时,至少会失败。当然,对空流进行的第一次测试将期望它返回null,并且您编写的第一个代码将是return null,但这没关系。您的下一个测试将强制您更改它。从那里继续,直到你有完成的方法。

答案 1 :(得分:3)

您似乎有几个具有多个不同setUp灯具的TestCases。

  1. FoundDirectory TestCase。 setUp创建预期的有效文件。

    这可以有几个子类。

    1. 找不到连接字符串TestCase。 setUp创建了预期但无效的文件。

    2. 错误路径TestCase。 setUp创建了预期但无效的文件。

    3. 没有web.config TestCase。 setUp创建了预期但无效的文件。

    4. web.config TestCase中没有连接字符串。 setUp创建了预期但无效的文件。

  2. DidntFindDirectory TestCase。 setUp确保目录不存在。

  3. DidntFindFile TestCase。 setUp创建目录但没有文件。

答案 2 :(得分:0)

使持有你方法的对象(或方法本身)依赖于某种类型的IConfigLoader,你可以模拟:

public interface IConfigLoader
{
    XmlReader LoadAppConfigFrom(string path);
}   

从您的方法中使用它来获取您要解析的XML文件。

答案 3 :(得分:0)

我建议你的问题中的故事混合了几个问题:

  1. 查找并打开文件,
  2. 将数据加载到“配置”(无论如何表示)
  3. 尝试从“配置”中获取特定参数
  4. 第3点现在是配置行为的问题,可以用TDD方式开发。

    第2点现在是构造配置的方式(例如,通过ConfigurationLoader),并且可以以TDD方式开发(例如,针对StringReader)。

    现在,问题1是您是否可以为指定的文件路径打开Reader。完成第2点后很容易添加。