public void BeforeAllTests() { _balloonProgramTypeInfo = new TypeDelegator(typeof(BalloonProgram)); var assembly = Assembly.GetAssembly(typeof(Program)); _writeDelegateTypeInfo = assembly.DefinedTypes.FirstOrDefault(t => { if (!typeof(MulticastDelegate).IsAssignableFrom(t)) { return(false); } //check signature (must return void and have a string parameter) var methodInfo = t.DeclaredMethods.First(p => p.Name == "Invoke"); if (methodInfo.ReturnType.Name.ToLower() != "void") { return(false); } ParameterInfo[] parameters = methodInfo.GetParameters(); if (parameters.Length != 1) { return(false); } if (parameters[0].ParameterType != typeof(string)) { return(false); } return(true); }); if (_writeDelegateTypeInfo != null) { _constructorTypeInfo = _balloonProgramTypeInfo.GetConstructors().FirstOrDefault(c => { var parameters = c.GetParameters(); if (parameters.Length != 1) { return(false); } return(parameters[0].ParameterType == _writeDelegateTypeInfo.AsType()); }); if (_constructorTypeInfo != null) { MethodInfo handlerMethodInfo = typeof(BalloonProgramTests).GetMethod(nameof(LogWrite), BindingFlags.NonPublic | BindingFlags.Instance); Delegate writeDelegate = Delegate.CreateDelegate(_writeDelegateTypeInfo, this, handlerMethodInfo); _program = (BalloonProgram)_constructorTypeInfo.Invoke(new object[] { writeDelegate }); } } _balloonProgramClassContent = Solution.Current.GetFileContent(@"Exercise1\BalloonProgram.cs"); }
public void BeforeEachTest() { try { _writeLogs = new List <string>(); if (_writeDelegateTypeInfo != null && _constructorTypeInfo != null) { MethodInfo handlerMethodInfo = typeof(BalloonProgramTests).GetMethod(nameof(LogWrite), BindingFlags.NonPublic | BindingFlags.Instance); Delegate writeDelegate = Delegate.CreateDelegate(_writeDelegateTypeInfo, this, handlerMethodInfo); _program = (BalloonProgram)_constructorTypeInfo.Invoke(new object[] { writeDelegate }); } } catch (Exception e) { TestContext.WriteLine("Error while setting up the program:"); TestContext.WriteLine(e.ToString()); } }