OSDN Git Service

#30244 Visual Studioの自動テストはテストクラスがinternalだと実行されていなかったので修正,
[wptscs/wpts.git] / HmLibTest / Utilities / LockObjectTest.cs
1 // ================================================================================================
2 // <summary>
3 //      LockObjectのテストクラスソース。</summary>
4 //
5 // <copyright file="LockObjectTest.cs" company="honeplusのメモ帳">
6 //      Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
7 // <author>
8 //      Honeplus</author>
9 // ================================================================================================
10
11 namespace Honememo.Utilities
12 {
13     using System;
14     using System.Threading.Tasks;
15     using Microsoft.VisualStudio.TestTools.UnitTesting;
16
17     /// <summary>
18     /// <see cref="LockObject"/>のテストクラスです。
19     /// </summary>
20     [TestClass]
21     public class LockObjectTest
22     {
23         #region パラメータ単位のロック用メソッドテストケース
24
25         /// <summary>
26         /// <see cref="LockObject.GetObject"/>メソッドテストケース(正常系)。
27         /// </summary>
28         [TestMethod]
29         public void TestGetObject()
30         {
31             // 同じ入力に同じオブジェクトが、違う入力には違うオブジェクトが返ること
32             // ※ 厳密にはハッシュ単位なので一致することもありえるが
33             LockObject lockObject = new LockObject();
34             object obj = lockObject.GetObject("test");
35             Assert.IsNotNull(obj);
36             Assert.AreNotSame(obj, lockObject.GetObject("test2"));
37             Assert.AreSame(obj, lockObject.GetObject("test"));
38         }
39
40         /// <summary>
41         /// <see cref="LockObject.GetObject"/>メソッドテストケース(並列実行)。
42         /// </summary>
43         [TestMethod, Timeout(1500)]
44         public void TestGetObjectParallel()
45         {
46             // 同じ入力に同じオブジェクトが返ること
47             LockObject lockObject = new LockObject();
48             Parallel.For(
49                 0,
50                 100000,
51                 (int i)
52                     =>
53                 {
54                     int key = i % 100;
55                     object obj = lockObject.GetObject(key);
56                     Assert.IsNotNull(obj);
57                     Assert.AreSame(obj, lockObject.GetObject(key));
58                 });
59         }
60
61         /// <summary>
62         /// <see cref="LockObject.GetObject"/>メソッドテストケース(null)。
63         /// </summary>
64         [TestMethod]
65         [ExpectedException(typeof(ArgumentNullException))]
66         public void TestGetObjectNull()
67         {
68             new LockObject().GetObject(null);
69         }
70         
71         #endregion
72     }
73 }