Unit testing 当我需要处理复杂的大型XML文件时,寻找一种推荐的单元测试设计方法

Unit testing 当我需要处理复杂的大型XML文件时,寻找一种推荐的单元测试设计方法,unit-testing,Unit Testing,我正在使用Visual Studio 2017单元测试项目 我有一个应用程序,可以读取复杂的XML文件,并根据数据中的XPATH查询进行一些处理。我需要为我的应用程序构建一系列单元测试。我想到了以下两个选择: 选项#1:在单元测试项目中包括一些选定的XML文件 创建读取文件的单元测试,并测试特定场景。 这是我最直观、最简单的选择。因为我可以在我选择的XML文件中包含许多复杂的场景,所以根据需要更新它们,然后构建所有必需的单元测试 选项2:创建提供特定XML数据场景的模拟类 我需要创建几个模拟类来

我正在使用Visual Studio 2017单元测试项目

我有一个应用程序,可以读取复杂的XML文件,并根据数据中的XPATH查询进行一些处理。我需要为我的应用程序构建一系列单元测试。我想到了以下两个选择:

选项#1:在单元测试项目中包括一些选定的XML文件

创建读取文件的单元测试,并测试特定场景。 这是我最直观、最简单的选择。因为我可以在我选择的XML文件中包含许多复杂的场景,所以根据需要更新它们,然后构建所有必需的单元测试

选项2:创建提供特定XML数据场景的模拟类

我需要创建几个模拟类来提供特定的XML数据场景。应用程序需要更新,以便通过IoC容器中的类获取数据

对我来说,选项1非常简单,但我想了解更多关于选项2的信息

问题
以上两个选项是否与单元测试设计最佳实践一致?对于我的senatio来说,什么是最优化的单元测试设计?

什么是最好的取决于您的具体需求。但是,通常您会努力实现运行速度快、在不同环境(不仅仅是您的机器)中执行、确定性等测试

在我看来,选项#1虽然可能是最快实现的,但对测试执行有负面影响(文件访问需要一些时间),使测试执行依赖于环境(对文件的权限、哪个目录?、文件名编码等),可能导致非确定性行为(由于并行测试进程正在运行,文件被锁定)等

相比之下,选项#2最初可能会花费更多的实现工作。但是,有一些机制可以降低成本:您可以实现helper函数来创建典型的XML内容,这样一些测试用例就可以从这些常见的helper函数中受益