继 this问题...我正在尝试对以下场景进行单元测试:
我有一个类,它允许调用一个方法来执行某些操作,如果它失败,请等待一秒钟并调用该方法。
假设我想调用一个方法 DoSomething()...但是如果 DoSomething() 抛出异常,我希望能够重试最多调用它 3 次,但在每次尝试之间等待 1 秒。在这种情况下,单元测试的目的是验证当我们调用 DoSomething() 3 次并在每次重试之间等待 1 秒时,总时间是否大于等于 3 秒。
不幸的是,我想测试它的唯一方法是使用秒表计时......它有两个副作用......
如果有一种方法可以模拟这种对时间的依赖,以便我的测试能够运行得更快并且结果相当一致,那就太好了。不幸的是,我想不出这样做的方法……所以我想我会问一下,看看你们中是否有人遇到过这个问题……
最佳答案
你可以做一个 Waiter
提供方法的类,Wait(int)
等待指定的时间量。对此方法进行测试,然后在您的单元测试中,传入一个模拟版本,该版本仅跟踪要求等待多长时间,但立即返回。
例如(C#):
interface IWaiter
{
void Wait(int milliseconds);
}
class Waiter : IWaiter
{
public void Wait(int milliseconds)
{
// not accurate, but for the sake of simplicity:
Thread.Sleep(milliseconds);
}
}
class MockedWaiter : IWaiter
{
public void Wait(int milliseconds)
{
WaitedTime += milliseconds;
}
public int WaitedTime { get; private set; }
}
关于unit-testing - 是否可以在单元测试中模拟时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1309571/