Salakhetdinov Shamil
mcp2004 at mail.ru
Tue Jun 19 10:57:22 CDT 2012
Hi All - I wanted to share some code snippets I'm getting written here while mastering C# programming using LINQPad. Presented here code snippet will instantiate and run in parallel two sample test classes resulting in an output as the following: 19.06.2012 19:49:42: Test1 instantiated. 19.06.2012 19:49:42: Test2 instantiated. 19.06.2012 19:49:42: Test1 setup. 19.06.2012 19:49:42: Test2 setup. 19.06.2012 19:49:43: Test2 run started... 19.06.2012 19:49:44: Test1 run started... 19.06.2012 19:49:44: Test2 run completed. 19.06.2012 19:49:44: Test2 tear down. 19.06.2012 19:49:45: Test1 run completed. 19.06.2012 19:49:45: Test1 tear down. All and any comments & remarks are very welcome! Thank you. -- Shamil P.S. Code snippet: --- cut here --- // LINQPad test program start code line - to be commented under VS static void Main() { Program.Main(); } // Program - main entry method class Program { public static void Main(string[] args = null) { try { // Short def: // Run tests from this assembly test classes in parallel // // Long def: // Select classes in this assembly, // which type name starts with a string 'Test', // order selected type names in ascending order, // and then for each selected class // start parallel thread, which will // create class instance, // will cast that instance to ITest interface, // and if cast returns not null ITest instance // will call Setup(), Run() and TearDown() methods... typeof(Program).Assembly.GetTypes() .Where(x => x.Name.StartsWith("Test")) .OrderBy(x => x.Name) .AsParallel() .ForAll(x => { ITest test = Activator.CreateInstance(x) as ITest; if (test != null) { System.Console.WriteLine("{0}: {1} instantiated.", DateTime.Now, test.GetType().Name); test.Setup(); test.Run(); test.TearDown(); } }); } catch (Exception ex) { System.Console.WriteLine("Error = '{0}'", ex.Message); } } } // Logger - utility class public class Logger { protected void log(params dynamic[] args) { System.Console.WriteLine(args[0], args[1], args[2].Name); } } // ITest - test setup, run and tear down interface public interface ITest { void Setup(); void Run(); void TearDown(); } // Test2 - sample test class public class Test2: Logger, ITest { public void Setup() { log("{0}: {1} setup.", DateTime.Now, typeof(Test2)); } public void TearDown() { log("{0}: {1} tear down.", DateTime.Now, typeof(Test2)); } void ITest.Run() { log("{0}: {1} run started...", DateTime.Now, this.GetType()); System.Threading.Thread.Sleep(1000); log("{0}: {1} run completed.", DateTime.Now, this.GetType()); } } // Test2 - sample test class public class Test1: Logger, ITest { public void Setup() { log("{0}: {1} setup.", DateTime.Now, this.GetType()); System.Threading.Thread.Sleep(1000); } public void TearDown() { log("{0}: {1} tear down.", DateTime.Now, this.GetType()); } void ITest.Run() { log("{0}: {1} run started...", DateTime.Now, this.GetType()); System.Threading.Thread.Sleep(1000); log("{0}: {1} run completed.", DateTime.Now, this.GetType()); } } -- cut here -- Thank you. -- Shamil