public void CreateInstance() { //不会重复创建打上并发访问安全类型特性的对象 AssertPro.NotThrowsException <TypeUnsafeAccessException>(() => { var obj0 = SafeAccessAttribute.CreateSingleton <SafeInternalClass>(); var obj1 = SafeAccessAttribute.CreateSingleton <SafeInternalClass>(); Assert.AreEqual(obj0.Id, obj1.Id); }); //不能以单例形式创建没有打上并发访问安全类型特性的对象 Assert.ThrowsException <TypeUnsafeAccessException>(() => { SafeAccessAttribute.CreateSingleton <UnsafeInternalClass>(); }); //自动创建实例,也不会重复创建打上并发访问安全类型特性的对象 { var obj0 = SafeAccessAttribute.CreateInstance <SafeInternalClass>(); var obj1 = SafeAccessAttribute.CreateInstance <SafeInternalClass>(); Assert.AreEqual(obj0.Id, obj1.Id); } //自动创建实例,会重复创建没有打上并发访问安全类型的对象 { var obj0 = SafeAccessAttribute.CreateInstance <UnsafeInternalClass>(); var obj1 = SafeAccessAttribute.CreateInstance <UnsafeInternalClass>(); Assert.AreNotEqual(obj0.Id, obj1.Id); } }
public void CheckUp() { //检查InternalSafeClass,不会引起非并发访问安全的异常 AssertPro.NotThrowsException <TypeUnsafeAccessException>(() => { SafeAccessAttribute.CheckUp(typeof(SafeInternalClass)); }); //检查InternalUnsafeClass,会引起非并发访问安全的异常 Assert.ThrowsException <TypeUnsafeAccessException>(() => { SafeAccessAttribute.CheckUp(typeof(UnsafeInternalClass)); }); }
public static void AssertBook(Book book) { //验证book表的数据 DataPortal.Direct <Book>((conn) => { var data = conn.QuerySingle("select * from book where id=@id", new { Id = book.Id }); Assert.AreEqual(data.Name, book.Name); Assert.AreEqual(data.CoverId, book.Cover.Id); Assert.AreEqual(data.CategoryId, book.Category.Id); Assert.AreEqual(data.MainBookmarkId, book.MainBookmark.Id); Assert.AreEqual(data.FirstBookmarkId, book.FirstBookmark.Id); Assert.AreEqual(data.LastBookmarkId, book.LastBookmark.Id); Assert.AreEqual(data.Signature, book.GetSignature()); Assert.AreEqual(data.Signature2, book.GetSignature2()); AssertAuthor(book, book.GetCreator(), conn); string dataEPIs = data.ErrorPageIndexs; var epis = dataEPIs.Split(',').Select((t) => int.Parse(t.FromBase64())); AssertPro.AreEqual(epis, book.ErrorPageIndexs); Assert.AreEqual(data.SourceAddressId, book.SourceAddress.Id); Assert.IsNull(data.Publication); Assert.IsTrue(book.Publication.IsEmpty()); AssertPro.AreEqualSecond(data.SaleTime, (DateTime)book.SaleTime); }); //验证book的属性Cover对应的数据信息 DataPortal.Direct <Book>((conn) => { var cover = book.Cover; AssertBookCover(book, cover, conn); }); DataPortal.Direct <Book>((conn) => { AssertBookmark(book, book.MainBookmark, conn); var bookmarksData = conn.Query("select * from Book_Bookmarks where RootId=@RootId", new { RootId = book.Id }); AssertBookmarks(book, bookmarksData, book.Bookmarks, conn); AssertBookmark(book, book.FirstBookmark, conn); AssertBookmark(book, book.LastBookmark, conn); }); DataPortal.Direct <Book>((conn) => { var datas = conn.Query("select * from Book_Posters where RootId=@RootId", new { RootId = book.Id }); AssertBookPosters(book, datas, book.Posters, conn); }); DataPortal.Direct <Book>((conn) => { var datas = conn.Query("select * from Book_RelatedCategories where RootId=@RootId", new { RootId = book.Id }); AssertBookCategories(datas, book.RelatedCategories, conn); }); DataPortal.Direct <Book>((conn) => { AssertBookAddress(book, book.SourceAddress, conn); var datas = conn.Query("select * from Book_SaleAddresses where RootId=@RootId", new { RootId = book.Id }); AssertBookAddresses(book, datas, book.SaleAddresses, conn); }); }