public void SplittingByType() { var logger = new ExceptionLogger(); var counter = new ExecutionCounter(); var res1 = new[] { "1", "12", "123", "1234", null, "12345" } .Try(value => counter.Action(() => 100 / (value.Length - 2))) .WhenIs(logger.LogInts) .WhenIs(logger.HandleException) .ToArray(); Assert.AreEqual(6, res1.Count()); // we should have 6 return values Assert.AreEqual(2, logger.List.Count()); // out list of logs contains two exceptions Assert.AreEqual(4, logger.IntList.Count()); // out list of ints contains two integers Assert.AreEqual(6, counter.Count); // we have only 6 executions of the calculation Assert.AreEqual(-100, (int)res1[0]); // check for a successfull result }