添加假I / O进行测试

时间:2018-10-08 18:52:49

标签: c# .net

.NET是否有办法,我可以添加伪造的I / O进行自动化测试?

我看到了这个问题:How to best simulate IO bound work?
从概念上讲,这与我想要执行的操作类似,但是由于我不是在此测试中测量时间,而是在实际的I / O中测量时间,因此标记的解决方案将不起作用。本质上,我不在乎操作是什么,因为它与测试无关,但是对于此测试,我希望增加实际的I / O,以证明可以在被测应用程序中对其进行跟踪。我说我不在乎它是什么,但是,如果可能的话,理想的方法是更快地运行以立即提高操作系统所测量的I / O的速度。

我正在使用内置的(Windows).NET PerformanceCounters,但是我不想在测试中模拟它们-我想知道它们正在正确地跟踪(在这种情况下为I / O。)< / p>

测试代码:

    [TestMethod]
    public void GetCurrentIO()
    {
        _SUT.StartTrackingIO();
        long result = default;
        Parallel.Invoke(
            _SimulateIOLoad,
            () => { result = _SUT.GetCurrentIO(); }
        );
        Assert.IsTrue(result > 0, "Current IO value should be above 0");
    }

1 个答案:

答案 0 :(得分:0)

我没有伪造它,而是循环创建了一个文件并进行了测量:

private long _SimulateIOLoad()
{
    long current = 0;
    while (current <= 0)
    {
        var count = 0;
        var file = Path.GetTempPath() + $"simulateIOLoad-{count}.txt";
        File.WriteAllText(file, "simulateIOLoad");
        File.Delete(file);
        current = _SUT.GetCurrentIO();
        ++count;
    }
    return current;
}

在我的测试中,这证明可以测量大于0的I / O值。这不是我最初想要的,但是它的运行速度惊人得惊人。