Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对Excel阅读器进行单元测试?_C#_Unit Testing_Tdd - Fatal编程技术网

C# 如何对Excel阅读器进行单元测试?

C# 如何对Excel阅读器进行单元测试?,c#,unit-testing,tdd,C#,Unit Testing,Tdd,我的C#应用程序中有一个ExcelReader类-我需要将Excel电子表格导入数据库表。我的问题是,这是为数不多的未经测试的类之一——我不能对它使用“模拟输入”,而使用实际的Excel电子表格进行测试会使测试有点慢(大约1秒)。我知道这个类工作正常-我手动测试了它-但是我有点担心它没有自己的测试 所以-我的问题是:哪一个更好:没有单元测试,缓慢的单元测试,还是我无法理解的第三种方法 [编辑]很多很好的答案,很抱歉我只能标记一个。您可以包装ExcelReader并模拟包装器。一个简单的例子是:

我的C#应用程序中有一个
ExcelReader
类-我需要将Excel电子表格导入数据库表。我的问题是,这是为数不多的未经测试的类之一——我不能对它使用“模拟输入”,而使用实际的Excel电子表格进行测试会使测试有点慢(大约1秒)。我知道这个类工作正常-我手动测试了它-但是我有点担心它没有自己的测试

所以-我的问题是:哪一个更好:没有单元测试,缓慢的单元测试,还是我无法理解的第三种方法


[编辑]很多很好的答案,很抱歉我只能标记一个。

您可以包装
ExcelReader
并模拟包装器。一个简单的例子是:

                              +--------------+
                              | {interface}  |
                              | IExcelReader |
                              +--------------+
                                     ^
                                     |
                                     |
+-------------+ 1       1 +--------------------+
| ExcelReader |-----------| ExcelReaderWrapper |
|             |           |                    |
+-------------+           +--------------------+

这样,任何需要实际的
ExcelReader
的类都可以引用
IExcelReader
,并由
ExcelReaderRapper
或其仿制品注入。它可能会创建很多类,但好处在于可以替换ExcelReader,并且您不会被迫编写缓慢的集成测试。

您可以包装ExcelReader并模拟包装器。一个简单的例子是:

                              +--------------+
                              | {interface}  |
                              | IExcelReader |
                              +--------------+
                                     ^
                                     |
                                     |
+-------------+ 1       1 +--------------------+
| ExcelReader |-----------| ExcelReaderWrapper |
|             |           |                    |
+-------------+           +--------------------+

这样,任何需要实际的
ExcelReader
的类都可以引用
IExcelReader
,并由
ExcelReaderRapper
或其仿制品注入。它可能会创建很多类,但好处在于可以替换ExcelReader,并且您不会被迫编写一个缓慢的集成测试。

我会选择缓慢的测试。但是你可以把它做成一个“集成测试”。

我会选择慢测试。但您可以将其作为“集成测试”。

通常,单元测试不涉及文件系统、数据库或任何共享资源。从FS读取文件并将其加载到DB中的测试通常称为集成测试

我通常将集成测试分为一个单独的组,这个组可以缓慢运行(总共几分钟)


您还可以重构ExcelReader并提取底层部分,这需要一个真正的文件才能读入单独的类。然后您可以模拟它并在单元测试中测试其他逻辑

通常,单元测试不涉及文件系统、数据库或任何共享资源。从FS读取文件并将其加载到DB中的测试通常称为集成测试

我通常将集成测试分为一个单独的组,这个组可以缓慢运行(总共几分钟)


您还可以重构ExcelReader并提取底层部分,这需要一个真正的文件才能读入单独的类。然后您可以模拟它并在单元测试中测试其他逻辑

我将为it创建集成测试,使用一系列已定义的电子表格,测试使用这些电子表格来测试某些功能,测试是否产生了预期的输出。我会将电子表格提交给源代码管理。与单元测试不同,我还将在不同的项目中进行测试。

我将为它创建集成测试,使用一系列定义的电子表格,这些电子表格由测试用来测试某些功能,测试是否生成了预期的输出。我会将电子表格提交给源代码管理。我也会在不同的项目中进行单元测试。

我们也有一大堆关于excel的单元测试,从经验来看,让它们定期运行而不进行模拟是很好的。尤其是COM通信有点单调乏味,而且Excel中可写/可读字符串的大小存在限制(取决于您的读取方式)。我记得我通过测试发现了一个911字符限制。对于一些非常长的测试(>15分钟),我们添加了一个特殊的类别属性“LongDuration”,使它们只在夜间版本中运行。

我们也有大量关于excel的单元测试,根据经验,让它们定期运行而不必模拟是很好的。尤其是COM通信有点单调乏味,而且Excel中可写/可读字符串的大小存在限制(取决于您的读取方式)。我记得我通过测试发现了一个911字符限制。对于一些非常长的测试(>15分钟),我们添加了一个特殊的类别属性“LongDuration”,让它们只在夜间版本中运行。

这怎么样

ExcelReader --- has --- ExcelInterop (interface) --- to read --- .xls
我假设ExcelReader具有比调用Excel互操作库函数更多的逻辑。 如果是这样的话,通过在ExcelInterop的模拟实现中开槽,为ExcelReader编写快速单元测试。您可以使用它来模拟/存根对互操作库的调用

接下来,为ExcelInterop接口编写契约测试。这里的测试主题是一个包装类(真正的接口实现),它委托给实际的MS Excel互操作程序集。这些测试应该验证您使用的API是否按照预期工作;对golden/reference.xls运行此命令

用“LongRunning”或equiv属性标记第二组测试,如果速度太慢,则减少运行频率(在生成计算机上/在EOD时运行一次)。

这如何

ExcelReader --- has --- ExcelInterop (interface) --- to read --- .xls
我假设ExcelReader具有比调用Excel互操作库函数更多的逻辑。 如果是这样的话,通过在ExcelInterop的模拟实现中开槽,为ExcelReader编写快速单元测试。您可以使用它来模拟/存根对互操作库的调用

接下来,为ExcelInterop接口编写契约测试。这里的测试主题是一个包装类(真正的接口实现),它委托给实际的MS Excel互操作程序集。这些测试应该验证您使用的API是否按照预期工作;对golden/reference.xls运行此命令


使用“LongRunning”或equiv属性标记第二组测试,如果速度太慢,则减少运行频率(在生成计算机上/在EOD时运行一次)。

如果调用Excel,它本质上是一个集成测试。如果调用