我已经与TDD脱节了一段时间,而且非常生疏。我对如何TDD下面描述的方法有一些建议。
该方法必须在用户提供的应用程序目录中找到web.config文件。然后它必须从该配置文件中提取并返回一个连接字符串。
如果由于任何原因找不到连接字符串,它返回null,无论是坏路径,没有web.config,还是web.config中没有连接字符串。
我最初的想法是使用setup创建一个目录,并使用连接字符串写入web.config文件。然后,测试将使用创建的路径调用我的方法,并期望返回非null值,并且我的初始测试运行将失败,因为我的方法存根总是返回null。
然后,实现该方法,并运行期望传递的测试。然后,作为预测试(我忘记了术语),删除创建的目录,并调用期望空值的方法。
答案 0 :(得分:4)
首先,我不会让方法同时找到文件并提取连接字符串。如果您的框架还没有确定给定目录中是否存在文件的方法,那么编写一个方法,一旦有了文件,就编写一个方法从开放流中提取连接字符串。然后,为了进行测试,您可以提供内存流,而不必实际创建目录和文件。
其次,如果您不依赖于编译失败是第一次失败的测试,那么请首先尝试该方法以抛出NotImplementedException。这是一小步,但是当你编写第一个测试时,至少会失败。当然,对空流进行的第一次测试将期望它返回null,并且您编写的第一个代码将是return null
,但这没关系。您的下一个测试将强制您更改它。从那里继续,直到你有完成的方法。
答案 1 :(得分:3)
您似乎有几个具有多个不同setUp灯具的TestCases。
FoundDirectory TestCase。 setUp创建预期的有效文件。
这可以有几个子类。
找不到连接字符串TestCase。 setUp创建了预期但无效的文件。
错误路径TestCase。 setUp创建了预期但无效的文件。
没有web.config TestCase。 setUp创建了预期但无效的文件。
web.config TestCase中没有连接字符串。 setUp创建了预期但无效的文件。
DidntFindDirectory TestCase。 setUp确保目录不存在。
DidntFindFile TestCase。 setUp创建目录但没有文件。
答案 2 :(得分:0)
使持有你方法的对象(或方法本身)依赖于某种类型的IConfigLoader
,你可以模拟:
public interface IConfigLoader
{
XmlReader LoadAppConfigFrom(string path);
}
从您的方法中使用它来获取您要解析的XML文件。
答案 3 :(得分:0)
我建议你的问题中的故事混合了几个问题:
第3点现在是配置行为的问题,可以用TDD方式开发。
第2点现在是构造配置的方式(例如,通过ConfigurationLoader),并且可以以TDD方式开发(例如,针对StringReader)。
现在,问题1是您是否可以为指定的文件路径打开Reader。完成第2点后很容易添加。