Есть метод
public Stream Write()
{
var assembly = Assembly.GetExecutingAssembly();
using (Stream stream = assembly.GetManifestResourceStream("Monit95App.Services.Resource.particip-list.xlsx"))
{
var templateBook = new XLWorkbook(stream);
var templateSheet = templateBook.Worksheets.First();
templateSheet.Cell("C2").Value = "Отчет";
var memoryStream = new MemoryStream();
templateBook.SaveAs(memoryStream);
return memoryStream;
}
}
и юнит-тест под него
[TestMethod]
public void WriteTest()
{
//Arrange
var writer = new RsurReportModelXlsxConverter();
//Act
var stream = writer.Write();
var templateBook = new XLWorkbook(stream);
var templateSheet = templateBook.Worksheets.First();
var c2Value = templateSheet.Cell("C2").Value.ToString();
//Assert
Assert.IsNotNull(stream);
Assert.AreEqual("Отчет", c2Value);
}
И сейчас тест проходит.
Делая ревью мне не понравилось использование дополнительного потока MemoryStream
для возврата данных из метода в виде потока-данных.
Также хочется отметить, что копаясь в исходниках .NET мне не удалось узнать объект какого типа возвращает GetManifestResourceStream. Но подозревая что это FileStream.
И вот как я изменил метод
public Stream Write()
{
var assembly = Assembly.GetExecutingAssembly();
using (Stream stream = assembly.GetManifestResourceStream("Monit95App.Services.Resource.particip-list.xlsx"))
{
var templateBook = new XLWorkbook(stream);
var templateSheet = templateBook.Worksheets.First();
templateSheet.Cell("C2").Value = "Отчет";
return stream;
}
}
и получил исключение
Почему так происходит? Можно ли в моем случае обойтись одним потоком?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Например, есть некоторая страница, с которой можно управлять данными, и нужно, чтобы туда нельзя попасть, если кто то уже там находитсяНавскидку...