我写了一个用c#编写的excel(xls - 97-2003)文件生成器。 这基本上是NPOI的包装器。
这是生成器的接口:
public interface IExcelGenerator
{
/// <summary>
/// Add or replace a cell in the file.
/// </summary>
/// <param name="cell"></param>
void AddCell(Cell cell);
/// <summary>
/// Create the file in memory.
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
IFile CreateFile(string fileName);
}
生成器的最终结果是byte[]
(来自IFile
对象),表示原始文件。
我的Cell
课程已经过单元测试。现在我想对发电机本身进行单元测试。我需要声明单元格内容是正确的,以及应用于单元格的格式。
我看到的唯一方法是在内存中生成一个文件(byte[]
)并将其与我在磁盘上读取的文件进行比较。但是在Excel中打开文件并保存它的简单操作会增加很多重量(从6K到26K),即使内部没有任何改变。因此,即使单元格的内容正确,两个数组也几乎不会相同。
如何断言两个文件中的所有单元格具有相同的值和格式?
答案 0 :(得分:1)
对所有值和格式的清扫单元测试的替代方案可以选择关注关键任务方面。这样做时,您可以通过将byte []转换回C#类(在您的情况下通过NPOI)来对最终结果进行单元测试,或者您可以在将对象写入文件之前对其进行单元测试。
答案 1 :(得分:0)
我更喜欢的一种方法是创建一个预先格式化的模板&#34;我打开的电子表格,填充值,然后保存为/ stream,保持原始模板不变。需要手动检查模板,但模板可以包含格式,包括条件格式,公式等。使用这种方法,您可能只能比较值,并且比较值是微不足道的,不像验证格式,合并细胞等等。
答案 2 :(得分:0)
鉴于:
我得到的解决方案是首先生成文件并将结果byte[]
输出到base64字符串。
byte[] bytes = //Result of the generator.
string result = Convert.ToBase64String(bytes)
然后我把这个字符串作为const
放在我的测试中,然后我与它进行比较,而不是在磁盘上读取文件。