示例#1
0
        public void Battle(BattleTestCase testCase)
        {
            TestCaseFactory.SaveToDisk(testCase);


            RobotSpecification[] robots = _robocode.GetLocalRepository(testCase.AllRobotsCsv);

            var battle = new BattleSpecification(
                testCase.NumberOfRounds,
                testCase.BattlefieldSpecification,
                robots);

            _battleErrorEvents.Clear();
            _battleCompletedEvent = null;

            using (_wait = new AutoResetEvent(false))
            {
                _robocode.RunBattle(battle, false);

                _wait.WaitOne(testCase.TimeOut);
            }


            bool finished = _battleCompletedEvent != null;

            var adapter = new BattleResultAdapter();

            var outcomes = adapter.RecordOutcomes(
                testCase,
                finished ? _battleCompletedEvent.SortedResults : null,
                _battleErrorEvents.Select(e => e.Error),
                finished);

            TestCaseFactory.AddResult(outcomes);

            TestCaseFactory.ForgetAnyUnfinishedBusiness();


            var grouped = outcomes.GroupBy(o => o.OutcomeType).ToDictionary(g => g.Key);

            if (grouped.ContainsKey(OutcomeType.Lost))
            {
                var robotsThatBeatMe = grouped[OutcomeType.Lost];
                Assert.Fail("Lost to: " + robotsThatBeatMe.Select(e => e.EnemyName).Aggregate((n1, n2) => n1 + ", " + n2));
            }
            else if (grouped.ContainsKey(OutcomeType.Won))
            {
                var robotsThatIBeat = grouped[OutcomeType.Won];
                Console.WriteLine("Beat: " + robotsThatIBeat.Select(e => e.EnemyName).Aggregate((n1, n2) => n1 + ", " + n2));
            }
            else
            {
                Assert.Inconclusive();
            }
        }