Mercurial > pub > bltoolkit
view HowTo/Aspects/CounterAspect.cs @ 5:f7d63a092920
Исправлено условие Where в тех случаях, когда репозитарий не является генериком
author | cin |
---|---|
date | Tue, 10 Mar 2015 16:02:11 +0300 |
parents | f990fcb411a9 |
children |
line wrap: on
line source
using System; using System.Reflection; using NUnit.Framework; using BLToolkit.Aspects; using BLToolkit.Reflection; namespace HowTo.Aspects { [TestFixture] public class CounterAspectTest { public /*[a]*/abstract/*[/a]*/ class TestClass { // This is a method we collect statistic for. // Actually the entire class or even a base class // can be decorated with the attribute. // [/*[a]*/Counter/*[/a]*/] public /*[a]*/virtual/*[/a]*/ void TestMethod() { } } [Test] public void Test() { TestClass t = TypeAccessor<TestClass>.CreateInstance(); for (int i = 0; i < 10; i++) t.TestMethod(); MethodInfo methodInfo = typeof(TestClass).GetMethod("TestMethod"); MethodCallCounter counter = CounterAspect.GetCounter(methodInfo); Assert.AreEqual(10, counter.TotalCount); Console.WriteLine(@" Method : {0}.{1} TotalCount : {2} ExceptionCount : {3} CachedCount : {4} CurrentCalls : {5} TotalTime : {6} MinTime : {7} MaxTime : {8} AverageTime : {9} ", counter.MethodInfo.DeclaringType.Name, counter.MethodInfo.Name, counter.TotalCount, // total actual calls (no cached calls) counter.ExceptionCount, // calls with exceptions counter.CachedCount, // cached calls counter.CurrentCalls.Count, // current calls (make sense for multithreading) counter.TotalTime, // total work time counter.MinTime, // min call time counter.MaxTime, // max call time counter.AverageTime); // average call time } } }