У нас есть приложение, которое генерирует документы.Чтобы помочь нам в этом процессе, мы используем OpenXml.
. Для целей модульного тестирования мы хотим увидеть, совпадает ли сгенерированный документ с ожидаемым.
однако это:
public byte[] Save()
{
using (var memoryStream = new MemoryStream())
{
_wordprocessingDocument.Clone(memoryStream);
return memoryStream.ToArray();
}
}
возвращает новый байтовый массив каждый раз, когда мы его вызываем.
И я не могу понять, почему.
Я сохранил два из этих разных байтовых массивов на диски изменил расширение на .zip.
Все файлы в zip имеют одинаковое содержимое.
Любые указатели на то, почему байтовые массивы не являются точно такими же, будут приветствоваться!
ОБНОВЛЕНИЕ
Это должно быть связано со временем.Следующий код показывает «false» в консольном приложении.Если вы удалите Thread.Sleep (), он вернет "true".
class Program
{
static void Main(string[] args)
{
using (var document = WordprocessingDocument.Create("c:\\Test.docx", WordprocessingDocumentType.Document))
{
document.AddMainDocumentPart();
document.MainDocumentPart.Document = new Document();
document.MainDocumentPart.Document.Body = new Body();
document.MainDocumentPart.Document.Body.AppendChild(new Paragraph());
var firstClone = Save(document);
File.WriteAllBytes("D:\\Test1.docx", firstClone);
Thread.Sleep(5000);
var secondClone = Save(document);
File.WriteAllBytes("D:\\Test2.docx", secondClone);
Console.WriteLine(firstClone.SequenceEqual(secondClone));
Console.ReadLine();
}
}
private static byte[] Save(WordprocessingDocument wordprocessingDocument)
{
using (var memoryStream = new MemoryStream())
{
wordprocessingDocument.Clone(memoryStream);
return memoryStream.ToArray();
}
}
}
WORKAROUND
В моих модульных тестах я сравниваю FlatOpcStringдва документа.так как содержание то же самое, что я хочу проверить.Но вопрос здесь остается тем же.Почему сохранение этого документа с интервалом в 5 секунд приводит к двум разным байтовым массивам с абсолютно одинаковым содержимым.