.net core 如何模拟ExcelReaderFactory.CreateReader并返回IExcelDataReader数据

.net core 如何模拟ExcelReaderFactory.CreateReader并返回IExcelDataReader数据,.net-core,moq,azure-storage-blobs,xunit,.net Core,Moq,Azure Storage Blobs,Xunit,我正在使用xUnit和Moq编写单元测试 我的ExcelData类包含以下代码 public DataTable ReadFromExcel(CloudBlockBlob MasterDataSourceBlob, string SheetName) { DataTable dataInExcelSheet = new DataTable(); using (var memoryStream = new MemoryS

我正在使用xUnit和Moq编写单元测试

我的ExcelData类包含以下代码

       public DataTable ReadFromExcel(CloudBlockBlob MasterDataSourceBlob, string SheetName)
        {
            DataTable dataInExcelSheet = new DataTable();
            using (var memoryStream = new MemoryStream())
            {
                MasterDataSourceBlob.DownloadToStreamAsync(memoryStream);
                var headers = new List<string>();
               IExcelDataReader excelReader = ExcelReaderFactory.CreateReader(memoryStream);
          }
   public  class ExcelDataMock
    {

        public IExcelDataReader CreateReader(MemoryStream memoryStream)
        {
           return ExcelReaderFactory.CreateReader(memoryStream); 
        }
    }
   public interface IExcelDataMock
    {
        IExcelDataReader CreateReader(MemoryStream memoryStream);
    }
IExcelDataMock.cs文件包含以下代码

       public DataTable ReadFromExcel(CloudBlockBlob MasterDataSourceBlob, string SheetName)
        {
            DataTable dataInExcelSheet = new DataTable();
            using (var memoryStream = new MemoryStream())
            {
                MasterDataSourceBlob.DownloadToStreamAsync(memoryStream);
                var headers = new List<string>();
               IExcelDataReader excelReader = ExcelReaderFactory.CreateReader(memoryStream);
          }
   public  class ExcelDataMock
    {

        public IExcelDataReader CreateReader(MemoryStream memoryStream)
        {
           return ExcelReaderFactory.CreateReader(memoryStream); 
        }
    }
   public interface IExcelDataMock
    {
        IExcelDataReader CreateReader(MemoryStream memoryStream);
    }
我的测试类有以下代码

      [Fact]
        public void ReadFromExcel_Success()
        {
            var stream = new MemoryStream();
            var writer = new StreamWriter(stream);
            writer.Write("sample data");
            writer.Flush();
            stream.Position = 0;

            var mockExcelDataMock = new Mock<IExcelDataMock>();
            mockExcelDataMock.Setup(data => data.CreateReader(It.IsAny<MemoryStream>())).Returns<IExcelDataReader>(
                excel =>
            {

                var item = new Mock<IExcelDataReader>();

                return item.Object;
            }
            );


            var mockCloudBlockBlob = new Mock<CloudBlockBlob>(new Uri("https://samplestorage.blob.core.windows.net/samplecontainer"));


            mockCloudBlockBlob.Setup(blob => blob.DownloadToStreamAsync(It.IsAny<Stream>()))
                .Callback((Stream target) => stream.CopyTo(target)) 
                .Returns(Task.CompletedTask);


            string SheetName = null;

            this._iExcelOperations = new ExcelData(mockExcelDataMock.Object);

            this._iExcelOperations.ReadFromExcel(mockCloudBlockBlob.Object, SheetName);

        }
[事实]
public void ReadFromExcel_Success()
{
var stream=newmemoryStream();
var writer=新的StreamWriter(流);
写入(“样本数据”);
writer.Flush();
流位置=0;
var mockExcelDataMock=new Mock();
mockExcelDataMock.Setup(data=>data.CreateReader(It.IsAny())。返回(
excel=>
{
var item=new Mock();
返回项。对象;
}
);
var mockCloudBlockBlob=new Mock(新Uri(“https://samplestorage.blob.core.windows.net/samplecontainer"));
mockCloudBlockBlob.Setup(blob=>blob.DownloadToStreamAsync(It.IsAny()))
.Callback((流目标)=>Stream.CopyTo(目标))
.Returns(Task.CompletedTask);
字符串SheetName=null;
此._iExcelOperations=新的ExcelData(mockExcelDataMock.Object);
这是.\u iExcelOperations.ReadFromExcel(mockCloudBlockBlob.Object,SheetName);
}

如果我使用
ExcelReaderFactory.CreateReader(memoryStream)

没有可用于编码1252的数据。有关定义 自定义编码,请参阅文档以了解 Encoding.RegisterProvider方法。“

如果我使用
this.\u iExcelOperationsMock.CreateReader(memoryStream)
我得到如下错误

System.ArgumentException:'类型为'System.IO.MemoryStream'的对象 无法转换为类型“ExcelDataReader.IExcelDataReader”

如何解决这个问题

更新1:

错误:

无效的文件签名


我们需要更好地查看您显示的代码。当前的代码片段太不连贯,无法完全理解所询问的内容。实际上,我无法模拟ExcelReaderFactory.CreateReader(memoryStream)。这是给定的错误。请建议解决方案。您提供的示例代码不完整,因此难以提供信息不完整的正确解决方案。提供一个澄清您的具体问题的示例我还注意到您正在调用
MasterDataSourceBlob.DownloadToStreamAsync(memoryStream)在同步方法中,这将导致问题谢谢您的建议。根据添加System.Text.Encoding.CodePages后,问题已得到解决。现在,我遇到了我在相关更新1中指定的不同问题。