TDD在文本文件导入项目中

时间:2009-09-20 15:32:05

标签: c# unit-testing testing tdd nunit

我刚刚开始,是的,我还没有编写任何测试(我不是原教旨主义者,我不喜欢编译错误只是因为没有测试),但我想知道在哪里在将类详细信息写入(通过转换)到DB表之前,开始根据XML映射将一个解析固定长度平面文件记录的项目放入一个表示所有文件布局的超集的类中。

有很多外部因素,我不想全部嘲笑它们,那么在哪里或如何开始测试这个项目的好方法呢?

3 个答案:

答案 0 :(得分:7)

将问题分解为部分就是一切。一些例子:

  • 文件/信息流阅读器
  • 输入映射器
  • 输入映射器
  • 文件布局
  • 文件布局集合
  • 数据访问层

尝试给每个类一个单独的责任,确定它的依赖关系,然后注入它们。在mocks / stubs的帮助下,允许你单独测试每个类。

答案 1 :(得分:5)

我发现有两种技术可用于测试基于IO的类:

  • 尽可能使用StreamReaderStream等一般术语,而不是文件名。在测试中创建StringReaderMemoryStream并以这种方式提供数据很容易。
  • 有时您需要的数据量超过您希望在代码中嵌入文字的数据。在这种情况下,将测试文件(有时是输入和预期输出)添加为嵌入式资源,并使用Assembly.GetManifestResourceStream在执行时获取数据。

除了这些一般性观点之外,TrueWill的建议听起来非常好。如果你可以分割更大的任务,那么为每个单独的位编写单元测试听起来可能很容易 - 除了数据库访问,这通常很痛苦。如果您可以使数据库部分尽可能小,提供来自另一个易于测试的类的所有数据,这将使生活更简单。

答案 2 :(得分:1)

嗯,你想做测试,但你不想嘲笑。我相信它让你写integration testsacceptance tests。这意味着您必须在测试中进行大量设置,这可能会使您的测试变得脆弱且难以维护。

我真的建议您模拟外部依赖项。它会使你的应用程序松散耦合,我相信它将来会更容易维护。此外,您的测试将更易于管理。

那里有很多Mock Frameworks可以帮到你。我不得不承认,如果你在学习曲线之前从未这样做过。但我们从事软件开发业务,总会有新的东西需要学习。

如果您决定花一些时间学习模拟测试,可以从this article开始。

祝你好运。