c#事件的发布-订阅模型_C#实现发布订阅模式

1 namespaceWebChatUnitTest2 {3 [TestClass]4 public classPubSubCenterTest5 {6 public object Test1(ISubscribe subscribe, objectdata)7 {8 Assert.IsTrue(subscribe.Data ==data);9 returndata;10 }11

12 public object Test2(ISubscribe s, objectd)13 {14 returnd;15 }16

17 public object Test3(ISubscribe s, objectd)18 {19 returnd;20 }21

22 public object Test4(ISubscribe s, objectd)23 {24 returnd;25 }26

27 public object Test5(ISubscribe s, objectd)28 {29 returns.SubscribeName;30 }31

32 //测试删除订阅

33 [TestMethod]34 public voidTestRemoveSubscribe()35 {36 PubSubCenter pbc = newPubSubCenter();37 pbc.AddSubscribe("t1", Test5, "1");38 pbc.AddSubscribe("t1", Test5, "2");39 pbc.RemoveSubscribe("t1", "2");40 List al = new List();41 foreach (string item in pbc.Publish("t1"))42 {43 al.Add(item);44 }45 Assert.IsTrue(al.Count == 1);46 Assert.IsTrue(al[0] == "1");47 pbc.AddSubscribe("t1", Test5, "2");48 pbc.RemoveSubscribe("t1", "1");49 al.Clear();50 foreach (string item in pbc.Publish("t1"))51 {52 al.Add(item);53 }54 Assert.IsTrue(al.Count == 1);55 Assert.IsTrue(al[0] == "2");56 }57

58 //测试重载版本的订阅发布

59 [TestMethod]60 public voidTestMoreSubscribeAndPublish()61 {62 PubSubCenter pbc = newPubSubCenter();63 Subscribe subscribe = new Subscribe("t1", Test2, "2", "1");64 Subscribe subscribe2 = new Subscribe("t1", Test2, "2");65 Subscribe subscribe3 = newSubscribe();66 subscribe3.SubscribeMethod =Test2;67 subscribe3.SubscribeName = "3";68 subscribe3.SubscribeTag = "t1";69 pbc.AddSubscribe(subscribe);70 pbc.AddSubscribe(subscribe2);71 pbc.AddSubscribe(subscribe3);72 pbc.AddSubscribe("t1", Test2, "4");73 pbc.AddSubscribe("t1", Test2, "2", "5");74 List al = new List();75 foreach (object item in pbc.Publish("t1"))76 {77 al.Add(item);78 }79 Assert.IsTrue(al.Count == 5);80 Assert.IsNotNull(al[0]);81 Assert.IsNotNull(al[1]);82 Assert.IsNotNull(al[2]);83 Assert.IsNotNull(al[3]);84 Assert.IsNotNull(al[4]);85 al.Clear();86 foreach (object item in pbc.Publish("t1","2"))87 {88 al.Add(item);89 }90 Assert.IsTrue(al.Count == 5);91 Assert.IsNotNull(al[0]);92 Assert.IsNotNull(al[1]);93 Assert.IsNotNull(al[2]);94 Assert.IsNotNull(al[3]);95 Assert.IsNotNull(al[4]);96

97 Publish pub = new Publish("t1");98 al.Clear();99 foreach (object item inpbc.Publish(pub))100 {101 al.Add(item);102 }103 Assert.IsTrue(al.Count == 5);104 Assert.IsNotNull(al[0]);105 Assert.IsNotNull(al[1]);106 Assert.IsNotNull(al[2]);107 Assert.IsNotNull(al[3]);108 Assert.IsNotNull(al[4]);109

110 pub = new Publish("t1", "2");111 al.Clear();112 foreach (object item inpbc.Publish(pub))113 {114 al.Add(item);115 }116 Assert.IsTrue(al.Count == 5);117 Assert.IsNotNull(al[0]);118 Assert.IsNotNull(al[1]);119 Assert.IsNotNull(al[2]);120 Assert.IsNotNull(al[3]);121 Assert.IsNotNull(al[4]);122

123 pub = newPublish();124 pub.PublishData = "2";125 pub.PublishTag = "t1";126 al.Clear();127 foreach (object item inpbc.Publish(pub))128 {129 al.Add(item);130 }131 Assert.IsTrue(al.Count == 5);132 Assert.IsNotNull(al[0]);133 Assert.IsNotNull(al[1]);134 Assert.IsNotNull(al[2]);135 Assert.IsNotNull(al[3]);136 Assert.IsNotNull(al[4]);137 }138

139 //测试重名订阅事件

140 [TestMethod]141 public voidTestSameNameSubscribe()142 {143 PubSubCenter pbc = newPubSubCenter();144 pbc.AddSubscribe("t1", Test2, "2");145 pbc.AddSubscribe("t1", Test2, "2");146 pbc.AddSubscribe("t1", Test2, "3");147 List al = new List();148 foreach (string item in pbc.Publish("t1", "123"))149 {150 al.Add(item);151 }152 Assert.IsTrue(al.Count == 2);153 Assert.IsTrue(al[0] == "123");154 Assert.IsTrue(al[1] == "123");155 }156

157 //测试多方法订阅单事件

158 [TestMethod]159 public voidTestMoreSubscribeToOnePublish()160 {161 PubSubCenter pbc = newPubSubCenter();162 pbc.AddSubscribe("t1", Test2, "1");163 pbc.AddSubscribe("t1", Test3, "2");164 pbc.AddSubscribe("t1", Test4, "3");165 List al = new List();166 foreach (string item in pbc.Publish("t1", "2"))167 {168 al.Add(item);169 }170 Assert.IsTrue(al.Count == 3);171 Assert.IsTrue(al[0] == "2");172 Assert.IsTrue(al[1] == "2");173 Assert.IsTrue(al[2] == "2");174 }175

176 //测试单方法订阅多事件

177 [TestMethod]178 public voidTestOneSubscribeToMorePublish()179 {180 PubSubCenter pbc = newPubSubCenter();181 pbc.AddSubscribe("t1", Test1, "2", "t1");182 pbc.AddSubscribe("t2", Test1, "3", "t2");183 pbc.AddSubscribe("t3", Test1, "4", "t3");184 pbc.AddSubscribe("t4", Test1, "5", "t4");185 IList al = new List();186 foreach(String item in pbc.Publish("t1","2"))187 {188 al.Add(item);189 }190 Assert.IsTrue(al.Count == 1);191 Assert.IsTrue(al[0] == "2");192 al.Clear();193 foreach (String item in pbc.Publish("t2", "3"))194 {195 al.Add(item);196 }197 Assert.IsTrue(al.Count == 1);198 Assert.IsTrue(al[0] == "3");199 al.Clear();200 foreach (String item in pbc.Publish("t3", "4"))201 {202 al.Add(item);203 }204 Assert.IsTrue(al.Count == 1);205 Assert.IsTrue(al[0] == "4");206 al.Clear();207 foreach (String item in pbc.Publish("t4", "5"))208 {209 al.Add(item);210 }211 Assert.IsTrue(al.Count == 1);212 Assert.IsTrue(al[0] == "5");213 }214 }215 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值