如何对.Net Framework 编写的Azure Data Lake 的append 函数进行单元测试?

How to perform unit test on the append function of Azure Data Lake written in .Net Framework?

我创建了 Azure webjobs,其中包含用于创建文件和将数据附加到 Datalake Store 上的该文件的方法。我完成了它的所有开发部分发布 webjobs 等。现在我要编写单元测试来测试我发送的数据是否成功附加到文件中我需要知道的是如何执行这种单元测试任何想法?

我目前想做的是清除我的数据湖文件中的所有数据,然后向它发送测试数据。所以根据我发送的整个数据的列数据之一,我将检查它是否被附加。有什么方法可以快速判断我的测试数据是否写入?

注意:实际上我想知道如何删除数据湖上 csv 文件的特定行,但我不想使用 usql 来搜索所需的行。 (我没有直接将数据发送到 Datalake,它是通过 Azure 服务总线队列写入的,然后触发 webjobs 将数据附加到 datalake 上的文件。)

除了查看文件外,我几乎看不到其他选择。如果只有您的单元测试正在写入文件,那么您可以发送可变长度的追加,然后查看文件的大小是否因追加成功而适当更新。您可以随时阅读该文件,看看您的数据是否也成功了。

我解决了我的问题,我使用以下方法在 Datalake 存储中获取文件的长度:

var fileoffset = _adlsFileSystemClient.FileSystem.GetFileStatus(_dlAccountName, "/MyFile.csv").FileStatus.Length;

获取长度后,我将测试数据发送到数据湖,然后我再次使用相同的代码获取文件的长度。所以第一个长度,即在发送测试数据之前,它是我的偏移量,发送测试数据后得到的长度是我的目标长度,即从偏移量到目标长度,我使用以下方式读取我的数据湖文件:

Stream Stream1 = _adlsFileSystemClient.FileSystem.Open(_dlAccountName, "/MyFile.csv", totalfileLength, fileoffset);

在流中获取数据后,我尝试使用以下代码搜索我发送的测试数据:

注意:我在文件中有一列 guid,我根据它在文件流中搜索我发送的 guid。确保将搜索数据转换为字节,然后将其传递给函数 ReadOneSrch(..)。

 static bool ReadOneSrch(Stream fileStream, byte[] mydata)
    {
        int b;
        long i = 0;
        while ((b = fileStream.ReadByte()) != -1)
        {
            if (b == mydata[i++])
            {

                if (i == mydata.Length)
                    return true;

            }
            else
                i = b == mydata[0] ? 1 : 0;
        }

        return false;
    }