Здравствуйте, BlackEric, Вы писали:
BE>Как такое тестировать? Реально стартовать потоки в тесте? Но где гарантия, что потоки случайно не вызовут методы в нужном порядке.
BE>Да и что проверять в тесте?
Предлагаю так. Для пущей уверенности можно рандомно генерить массив tested;
using System.Diagnostics;
using static System.Console;
public class TestObject
{
public void First() => WriteLine(1);
public void Second() => WriteLine(2);
public void Third() => WriteLine(3);
}
public class Test
{
readonly int[] steps = new int[3];
readonly TestObject obj = new();
int step = 0;
public void RunAll()
{
var tested = new Action[]
{ () => { obj.First(); steps[step++] = 1; },
() => { obj.Second(); steps[step++] = 2; },
() => { obj.Third(); steps[step++] = 3;}
};
Parallel.ForEach( tested , action => action.Invoke());
}
public bool Validate()
=> steps[0] == 1 && steps[1] == 2 && steps[2] == 3;
}
public static class Program
{
static void Main()
{
Enumerable.Range(1, 100).ToList().ForEach(
_ =>
{
var test = new Test();
test.RunAll();
Debug.Assert(test.Validate(), "Нарушен порядок");
}
);
}
}
PS Еще есть такие фрэмейфорки fscheck cscheck
expecto