. Во время прохождения некоторых новых тестов я наткнулся на это: < /p>
Код: Выделить всё
[Test]
public void GetCorrectTimeoutInfoFromTimeSpan()
{
// Arrange
bool preTimeout;
bool postTimeout;
double random = new Random().NextDouble();
TimeoutHandler timeoutHandler;
// Act
timeoutHandler = new TimeoutHandler(TimeSpan.FromMilliseconds(1));
preTimeout = timeoutHandler.IsTimeout;
while(!timeoutHandler.IsTimeout)
{
// Simulate some work
random = Math.Sin(random) * Math.Cos(random);
}
GC.KeepAlive(random);
postTimeout = timeoutHandler.IsTimeout;
// Assert
Assert.Multiple(() =>
{
Assert.That(preTimeout, Is.False);
Assert.That(postTimeout, Is.True);
});
}
< /code>
переменная случайная случайность только для моделирования некоторой работы, обеспечивающей не быть «оптимизированным» через gc.keepalive (). Поскольку это будет использоваться повторно во многих различных ситуациях, когда нам нужно имитировать работу, я хотел посмотреть, есть ли лучше/более чистый способ.
вне головы, я бы подумал, что что-то подобное может сработать
{...}
double? rnd = null;
while(!timeoutHandler.IsTimeout)
rnd = SimulateWork(rnd);
{...}
public static double SimulateWork(double? rnd = null)
{
rnd ??= new Random().NextDouble();
return Math.Sin(rnd.Value) * Math.Cos(rnd.Value);
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... unit-tests