using NUnit.Framework; using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Vanara.InteropServices; namespace Vanara.PInvoke { public class GenericComTester where TInt : class { protected Stack objects = new Stack(); public virtual TInt Instance => (TInt)objects.Peek(); [OneTimeSetUp] public virtual void Setup() => objects.Push(InitInstance()); [OneTimeTearDown] public virtual void TearDown() { while (objects.Count > 0) Marshal.FinalReleaseComObject(objects.Pop()); } protected virtual TInt InitInstance() => Activator.CreateInstance(); } public class GenericTester where T : class, IDisposable { public virtual T Instance { get; protected set; } [OneTimeSetUp] public virtual void Setup() => Instance = InitInstance(); [OneTimeTearDown] public virtual void TearDown() => Instance?.Dispose(); protected virtual T InitInstance() => Activator.CreateInstance(); } }