private void ExecuteRandomDurationsTest(int nrOfTests, int maxRandomDuration, int nrOfThreads)
{
IDictionary <Model.TestCase, int> durations = CreateRandomTestResults(nrOfTests, maxRandomDuration);
MockOptions.Setup(o => o.MaxNrOfThreads).Returns(nrOfThreads);
ITestsSplitter splitter = new DurationBasedTestsSplitter(durations, TestEnvironment.Options);
List <List <Model.TestCase> > result = splitter.SplitTestcases();
result.Count.Should().Be(nrOfThreads);
result.Select(l => l.Count).Sum().Should().Be(nrOfTests);
int sumOfAllDurations = durations.Select(kvp => kvp.Value).Sum();
int maxDuration = durations.Select(kvp => kvp.Value).Max();
int targetDuration = sumOfAllDurations / nrOfThreads;
HashSet <Model.TestCase> foundTestcases = new HashSet <Model.TestCase>();
foreach (List <Model.TestCase> testcases in result)
{
int sum = testcases.Select(tc => durations[tc]).Sum();
sum.Should().BeLessThan(targetDuration + maxDuration / 2);
sum.Should().BeGreaterThan(targetDuration - maxDuration / 2);
foundTestcases.UnionWith(testcases);
}
foundTestcases.Count.Should().Be(nrOfTests);
}