// ================================================================================================ // // LockObjectのテストクラスソース。 // // // Copyright (C) 2012 Honeplus. All rights reserved. // // Honeplus // ================================================================================================ namespace Honememo.Utilities { using System; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; /// /// のテストクラスです。 /// [TestClass] public class LockObjectTest { #region パラメータ単位のロック用メソッドテストケース /// /// メソッドテストケース(正常系)。 /// [TestMethod] public void TestGetObject() { // 同じ入力に同じオブジェクトが、違う入力には違うオブジェクトが返ること // ※ 厳密にはハッシュ単位なので一致することもありえるが LockObject lockObject = new LockObject(); object obj = lockObject.GetObject("test"); Assert.IsNotNull(obj); Assert.AreNotSame(obj, lockObject.GetObject("test2")); Assert.AreSame(obj, lockObject.GetObject("test")); } /// /// メソッドテストケース(並列実行)。 /// [TestMethod, Timeout(1500)] public void TestGetObjectParallel() { // 同じ入力に同じオブジェクトが返ること LockObject lockObject = new LockObject(); Parallel.For( 0, 100000, (int i) => { int key = i % 100; object obj = lockObject.GetObject(key); Assert.IsNotNull(obj); Assert.AreSame(obj, lockObject.GetObject(key)); }); } /// /// メソッドテストケース(null)。 /// [TestMethod] [ExpectedException(typeof(ArgumentNullException))] public void TestGetObjectNull() { new LockObject().GetObject(null); } #endregion } }