首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.IO.Abstraction.TestingHelpers -在不同平台上进行测试

System.IO.Abstraction.TestingHelpers -在不同平台上进行测试
EN

Stack Overflow用户
提问于 2021-02-26 03:29:58
回答 1查看 126关注 0票数 2

我正在编写一个单元测试来检查对文件进行操作的一些方法。我在库端使用了System.IO.Abstraction,在UnitTests端使用了System.IO.Abstraction.UnitTesting。

我使用的是MacOS,但我也希望能够在Windows上运行测试。问题出在路径上,因为我们知道在windows上它像"C:\MyDir\MyFile.pdf",但在Linux/MacOS上它更像"/c/MyDir/MyFile.pdf“。

代码语言:javascript
复制
var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
    { @"/c/scans/myfile.pdf", new MockFileData("Some text") },
    { @"/c/scans/mysecondfile.pdf", new MockFileData("Some text") },
    { @"/c/scans/mydog.jpg", new MockFileData("Some text") }
});
var fileService = new FileService(fileSystem);
var scanDirPath = @"/c/scans/";

我不知道该怎么处理这件事。我想知道如何根据平台在xunit测试的构造函数中设置“初始”路径,但我不确定这是否是一个好的做法。

EN

回答 1

Stack Overflow用户

发布于 2021-07-22 03:17:06

我遇到了同样的情况,我需要在Windows和Linux上使用System.IO.Abstraction.TestingHelpersMockFileSystem执行单元测试,我通过为平台添加一个检查,然后使用该平台预期的字符串格式来使其正常工作。

按照相同的逻辑,您的测试可能如下所示:

代码语言:javascript
复制
[Theory]
[InlineData(@"c:\scans\myfile.pdf", @"/c/scans/myfile.pdf")]
[InlineData(@"c:\scans\mysecondfile.pdf", @"/c/scans/mysecondfile.pdf")]
[InlineData(@"c:\scans\mydog.jpg", @"/c/scans/mydog.jpg")]
public void TestName(string windowsFilepath, string macFilepath)
{
    // Requires a using statement for System.Runtime.InteropServices;
    bool isExecutingOnWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); 
    bool isExecutingOnMacOS = RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
    
    MockFileSystem fileSystem;
    if (isExecutingOnWindows)
    {
        fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
        {
            { windowsFilepath, new MockFileData("Some text") }
        };
    }
    else if (isExecutingOnMacOS)
    {
        fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
        {
            { macFilepath, new MockFileData("Some text") }
        };
    }
    else
    {
        // Throw an exception or handle this however you choose
    }

    var fileService = new FileService(fileSystem);
    // Test logic...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66375235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档