gpt4 book ai didi

c# - 如何在 .NET 中使用真实文件进行集成测试?

转载 作者:IT王子 更新时间:2023-10-29 03:48:00 25 4
gpt4 key购买 nike

我有一些类实现了一些与文件系统和文件相关的逻辑。例如,作为此逻辑的一部分,我正在执行以下任务:

  • 检查某个文件夹是否具有特定结构(例如,它包含具有特定名称的子文件夹等...)
  • 从这些文件夹中加载一些文件并检查它们的结构(例如,这些是一些配置文件,位于某个文件夹中的某个位置)
  • 从配置文件中加载用于测试/验证的其他文件(例如,此配置文件包含有关同一文件夹中其他文件的信息,这些文件应具有其他内部结构等...)

现在所有这些逻辑都有一些工作流程,如果出现问题(例如,在特定文件夹位置找不到配置文件),则会抛出异常。此外,还有Managed Extensibility Framework (MEF)涉及此逻辑,因为我正在检查的这些文件中的一些是我手动加载到 MEF 聚合等的托管 DLL...

现在我想以某种方式测试所有这些。我正在考虑在 HDD 上创建几个物理测试文件夹,涵盖各种测试用例,然后针对它们运行我的代码。我可以创建例如:

  • 结构正确且所有文件均有效的文件夹
  • 结构正确但配置文件无效的文件夹
  • 结构正确但缺少配置文件的文件夹等等……

这是正确的方法吗?我不确定在这种情况下如何准确运行我的代码......我当然不想运行整个应用程序并指向它来检查这些模拟文件夹。我应该使用一些单元测试框架来编写某种“单元测试”,针对这些文件系统对象执行我的代码吗?

一般来说,对于这种测试场景,所有这些都是正确的方法吗?还有其他更好的方法吗?

最佳答案

首先,我认为,最好编写单元测试来测试您的逻辑而不接触任何外部资源。这里有两个选择:

  1. 您需要使用抽象层将您的逻辑与文件系统等外部依赖项隔离开来。您可以轻松地在单元测试中 stub 或模拟(手动或借助受约束的隔离框架,例如 NSubstitute、FakeItEasy 或 Moq)此抽象。我更喜欢这个选项,因为在这种情况下,测试会促使您做出更好的设计。
  2. 如果您必须处理遗留代码(仅在这种情况下),您可以使用一种不受约束的隔离框架(例如 TypeMock Isolator、JustMock 或 Microsoft Fakes),它可以对几乎所有内容进行 stub /模拟(例如,密封和静态类,非虚拟方法)。但是他们要花钱。唯一的“免费”选项是 Microsoft Fakes,除非您是 Visual Studio 2012/2013 Premium/Ultimate 的快乐拥有者。

在单元测试中,您不需要测试外部库(例如 MEF)的逻辑。

其次,如果你想编写集成测试,那么你需要编写“happy path”测试(当一切正常时)和一些测试你的逻辑的测试在边界情况下(找不到文件或目录)。与@Sergey Berezovskiy 不同,我建议为每个测试用例创建单独的文件夹。主要优点是:

  1. 你可以给你的文件夹起有意义的名字,更清楚地表达你的意图;
  2. 您不需要编写复杂(即脆弱的)设置/拆卸逻辑。
  3. 即使您稍后决定使用另一个文件夹结构,也可以更轻松地更改它,因为您已经有了工作代码和测试(在测试工具下重构要容易得多)。

对于单元测试和集成测试,您可以使用普通单元测试框架(如 NUnit 或 xUnit.NET)。使用此框架可以非常轻松地在构建服务器上的持续集成场景中启动测试。

如果您决定编写这两种测试,那么您需要将单元测试与集成测试分开(您可以为每种测试创建单独的项目)。原因:

  1. 单元测试 是开发人员的安全网。他们必须在上次代码更改(错误修复、新功能)后提供有关系统单元预期行为的快速反馈。如果它们频繁运行,那么开发人员可以快速轻松地识别出破坏系统的代码段。没有人愿意运行缓慢的单元测试。
  2. 集成测试通常比单元测试慢。但他们有不同的目的。他们检查单元是否按预期工作并具有真正的依赖性。

关于c# - 如何在 .NET 中使用真实文件进行集成测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20265369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com