<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_天下無雙</title><subtitle type="text">阿龍--质量是流程决定的。</subtitle><id>http://feed.cnblogs.com/blog/u/27533/rss</id><updated>2011-10-29T04:26:09Z</updated><author><name>阿龍</name><uri>http://www.cnblogs.com/s021368/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/s021368/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/27533/rss"/><entry><id>http://www.cnblogs.com/s021368/archive/2011/10/29/2228474.html</id><title type="text">(转)MongoDB——安装篇（windows）</title><summary type="text">1、下载MongoDB数据库http://fastdl.mongodb.org/win32/mongodb-win32-i386-1.6.5.zip； 2、将安装文件解压到C盘（注意：安装路径中不能出现空格），配置“环境变量”，将 %MONGODB_HOME%\bin 添加到“Path”中； 3、进入DOS窗口，设置数据保存目录（与端口）和日志输出目录。 DOS命令： Dos代码 mongod--port&amp;lt;端口&amp;gt;--dbpath&amp;lt;数据路径&amp;gt;--logpath&amp;lt;日志路径&amp;gt;--logappend--directoryperdbmongod --port &amp;lt;</summary><published>2011-10-29T04:26:00Z</published><updated>2011-10-29T04:26:00Z</updated><author><name>阿龍</name><uri>http://www.cnblogs.com/s021368/</uri></author><link rel="alternate" href="http://www.cnblogs.com/s021368/archive/2011/10/29/2228474.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/s021368/archive/2011/10/29/2228474.html"/><content type="html">&lt;p&gt;1、下载MongoDB数据库http://fastdl.mongodb.org/win32/mongodb-win32-i386-1.6.5.zip； &lt;br /&gt; &lt;br /&gt;2、将安装文件解压到C盘（注意：安装路径中不能出现空格），配置&amp;ldquo;环境变量&amp;rdquo;，将 %MONGODB_HOME%\bin 添加到&amp;ldquo;Path&amp;rdquo;中； &lt;br /&gt; &lt;br /&gt;3、进入DOS窗口，设置数据保存目录（与端口）和日志输出目录。 &lt;br /&gt;DOS命令： &lt;/p&gt;&#xD;
&lt;div id="" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;Dos代码 &amp;nbsp;&lt;a title="收藏这段代码"&gt;&lt;img  src="http://hdxiong.iteye.com/images/icon_star.png" alt="收藏代码" /&gt;&lt;img  style="display: none;" src="http://hdxiong.iteye.com/images/spinner.gif" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;ol  start="1"&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;span&gt;mongod&amp;nbsp;--port&amp;nbsp;&amp;lt;端口&amp;gt;&amp;nbsp;--dbpath&amp;nbsp;&amp;lt;数据路径&amp;gt;&amp;nbsp;--logpath&amp;nbsp;&amp;lt;日志路径&amp;gt;&amp;nbsp;--logappend&amp;nbsp;--directoryperdb&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;/ol&gt;&lt;/div&gt;&#xD;
&lt;pre name="code" &gt;mongod --port &amp;lt;端口&amp;gt; --dbpath &amp;lt;数据路径&amp;gt; --logpath &amp;lt;日志路径&amp;gt; --logappend --directoryperdb&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;br /&gt;参数说明： &lt;br /&gt;--port&amp;nbsp;&amp;nbsp;&amp;nbsp; 表示数据库端口，默认27017； &lt;br /&gt;--dbpath&amp;nbsp; 表示数据文件存储路径，一般设置为%MONGODB_HOME%\data； &lt;br /&gt;--logpath 表示日志文件存储路径，一般设置为%MONGODB_HOME%\logs\mongodb.log； &lt;br /&gt;--logappend 表示日志追加，默认是覆盖； &lt;br /&gt;--directoryperdb 表示每个db一个目录； &lt;br /&gt; &lt;br /&gt;4、完成以上设置，MongoDB已经启动，新开启DOS窗口，执行&amp;ldquo;mongo.exe&amp;rdquo;，出现&amp;ldquo;MongoDB shell version: 1.8.1&amp;rdquo;表示安装成功了。 &lt;br /&gt; &lt;br /&gt;5、目前是以无权限限制的方式启动的，你可以做任何操作。那么我们先切换到admin下，创建一个root用户吧。执行命令: &lt;br /&gt;"use admin" -&amp;gt; "db.addUser('root','root')" -&amp;gt; "db.auth('root','root')"，如下图所示： &lt;br /&gt;&lt;img src="http://dl.iteye.com/upload/attachment/471639/82f5f7ca-9cda-3d4a-b588-25e7158c0694.png" alt="" /&gt; &lt;br /&gt; &lt;br /&gt;6、把MongoDB注册为Windows Service，让它开机自动启动；执行命令： &lt;/p&gt;&#xD;
&lt;div id="" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;Dos代码 &amp;nbsp;&lt;a title="收藏这段代码"&gt;&lt;img  src="http://hdxiong.iteye.com/images/icon_star.png" alt="收藏代码" /&gt;&lt;img  style="display: none;" src="http://hdxiong.iteye.com/images/spinner.gif" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;ol  start="1"&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;span&gt;mongod&amp;nbsp;--bind_ip&amp;nbsp;&lt;/span&gt;&lt;span &gt;127.0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span &gt;0.1&lt;/span&gt;&lt;span&gt;&amp;nbsp;--logpath&amp;nbsp;%MONGODB_HOME%\logs\mongodb.log&amp;nbsp;--logappend&amp;nbsp;--dbpath&amp;nbsp;%MONGODB_HOME%\data&amp;nbsp;--directoryperdb&amp;nbsp;--auth&amp;nbsp;--install&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;/ol&gt;&lt;/div&gt;&#xD;
&lt;pre name="code" &gt;mongod --bind_ip 127.0.0.1 --logpath %MONGODB_HOME%\logs\mongodb.log --logappend --dbpath %MONGODB_HOME%\data --directoryperdb --auth --install&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;br /&gt;注意： &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;a.&lt;/strong&gt;必须切换到bin目录下执行该条指令。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;b.&lt;/strong&gt;必须添加--auth用户权限才会生效。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;c.&lt;/strong&gt;除了&amp;ldquo;--auth&amp;rdquo;和&amp;ldquo;--install&amp;rdquo;两个参数，别的参数要跟你设置用户时启动服务的参数一致，尤其是&amp;ldquo;--directoryperdb&amp;rdquo;。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 第一次配置完成后，一定要重启才会有效果 重启mongo客户端，不输入-u-p可以直接进入，但是不具有任何权限。正确的访问方式为：mongo 数据库名 -u 用户名 -p。另外设置用户 &lt;br /&gt; &lt;br /&gt;7、服务安装成功后的界面： &lt;br /&gt;&lt;img src="http://dl.iteye.com/upload/attachment/471226/18f99413-eff6-3c4c-a1dd-fd0de3bb6a08.png" alt="" /&gt; &lt;br /&gt; &lt;br /&gt;8、如果安装失败： &lt;br /&gt;删除MongoDB服务，执行命令： &lt;/p&gt;&#xD;
&lt;div id="" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;Dos代码 &amp;nbsp;&lt;a title="收藏这段代码"&gt;&lt;img  src="http://hdxiong.iteye.com/images/icon_star.png" alt="收藏代码" /&gt;&lt;img  style="display: none;" src="http://hdxiong.iteye.com/images/spinner.gif" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;ol  start="1"&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;span&gt;sc&amp;nbsp;delete&amp;nbsp;MongoDB&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;/ol&gt;&lt;/div&gt;&#xD;
&lt;pre name="code" &gt;sc delete MongoDB&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;br /&gt;启动MongoDB服务，执行命令： &lt;/p&gt;&#xD;
&lt;div id="" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;Dos代码 &amp;nbsp;&lt;a title="收藏这段代码"&gt;&lt;img  src="http://hdxiong.iteye.com/images/icon_star.png" alt="收藏代码" /&gt;&lt;img  style="display: none;" src="http://hdxiong.iteye.com/images/spinner.gif" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;ol  start="1"&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;span&gt;net&amp;nbsp;start&amp;nbsp;&lt;/span&gt;&lt;span &gt;"MongoDB"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;/ol&gt;&lt;/div&gt;&#xD;
&lt;pre name="code" &gt;net start "MongoDB"&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt;9、在cmd下可有两种方法打开，net和sc，net用于打开没有被禁用的服务，语法是： &lt;br /&gt;启动：net/sc start 服务名 &lt;br /&gt;停止：net/sc stop 服务名 &lt;br /&gt; &lt;br /&gt;10、另外，sc可用于打开被禁用的服务，语法是： &lt;br /&gt;sc config 服务名 start= demand&amp;nbsp;&amp;nbsp;&amp;nbsp; //手动 &lt;br /&gt;sc condig 服务名 start= auto&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //自动 &lt;br /&gt;sc config 服务名 start= disabled //禁用 &lt;br /&gt;注意：以上三个命令&amp;ldquo;=&amp;rdquo;号后面必须有一个空格&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;http://hdxiong.iteye.com/blog/1018821&lt;/p&gt;&lt;img src="http://www.cnblogs.com/s021368/aggbug/2228474.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/s021368/archive/2011/10/29/2228474.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/s021368/archive/2011/10/29/2228473.html</id><title type="text">(转)MongoDB  增加用户 删除用户  修改用户  读写权限 只读权限,</title><summary type="text">MongoDB 增加用户 删除用户 修改用户 读写权限 只读权限,MongoDB用户权限分配的操作是针对某个库来说的。--这句话很重要。1、 进入ljc 数据库：use ljc; --ljc为数据库名称。2、添加用户（读写权限，readOnly--&amp;gt;false）：db.addUser(&amp;quot;java&amp;quot;,&amp;quot;java&amp;quot;);3、查看一下所有的用户db.system.users.find();{ &amp;quot;_id&amp;quot; : ObjectId(&amp;quot;4e02a89fb841deb5fda3e5e2&amp;quot;), &amp;quot;user&amp;quot; </summary><published>2011-10-29T04:23:00Z</published><updated>2011-10-29T04:23:00Z</updated><author><name>阿龍</name><uri>http://www.cnblogs.com/s021368/</uri></author><link rel="alternate" href="http://www.cnblogs.com/s021368/archive/2011/10/29/2228473.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/s021368/archive/2011/10/29/2228473.html"/><content type="html">&lt;div id="blog_content" &gt;&#xD;
&lt;p&gt;MongoDB&amp;nbsp; 增加用户 删除用户&amp;nbsp; 修改用户&amp;nbsp; 读写权限 只读权限,&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #ff0000;"&gt;MongoDB用户权限分配的操作是针对某个库来说的。--这句话很重要。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、 进入ljc 数据库：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;use ljc;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --ljc为数据库名称。&lt;/p&gt;&#xD;
&lt;p&gt;2、添加用户（读写权限，&lt;span style="color: #ff0000;"&gt;readOnly--&amp;gt;false&lt;/span&gt;）：&lt;/p&gt;&#xD;
&lt;p&gt;db.addUser("java","java");&lt;/p&gt;&#xD;
&lt;p&gt;3、&amp;nbsp;查看一下所有的用户&lt;/p&gt;&#xD;
&lt;p&gt;db.system.users.find();&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;{ "_id" : ObjectId("4e02a89fb841deb5fda3e5e2"), "user" : "java", &lt;span style="color: #ff0000;"&gt;"readOnly" : fa&lt;br /&gt;lse,&lt;/span&gt; "pwd" : "59cf7cc156874cbd35cb00869126f569" }&lt;/p&gt;&#xD;
&lt;p&gt;4、用户授权。&lt;/p&gt;&#xD;
&lt;p&gt;db.auth("java","java");&lt;/p&gt;&#xD;
&lt;p&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 显示为1 表示授权成功，0表示不成功。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;5、 添加用户（只读权限，&lt;span style="color: #ff0000;"&gt;readOnly--&amp;gt;true&lt;/span&gt;）：&lt;/p&gt;&#xD;
&lt;p&gt;db.addUser("java1","java1",true);&lt;br /&gt;&lt;br /&gt;db.system.users.find();&lt;br /&gt;{ "_id" : ObjectId("4e02a89fb841deb5fda3e5e2"), "user" : "java", &lt;span style="color: #ff0000;"&gt;"readOnly" : fa&lt;br /&gt;lse, &lt;/span&gt;"pwd" : "59cf7cc156874cbd35cb00869126f569" }&lt;br /&gt;{ "_id" : ObjectId("4e02aae6b841deb5fda3e5e3"), "user" : "java1",&lt;span style="color: #ff0000;"&gt; "readOnly" : t&lt;br /&gt;rue&lt;/span&gt;, "pwd" : "fca6bda05c87a72cce0a4a6458d1e266" }&lt;/p&gt;&#xD;
&lt;p&gt;注意上面标红的位置的readOnly 只读于可写是有区别的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;6、更改密码（为已经存在的用户更改密码）：&lt;/p&gt;&#xD;
&lt;p&gt;db.addUser("java","java1");&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;7、删除用户：&lt;/p&gt;&#xD;
&lt;p&gt;db.system.users.remove({user:"java1"});&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008200;"&gt;关于库权限,如果用户需要全局的权限,可以在admin和local的两个库里添加,但是需要重启库,&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008200;"&gt;有待验证。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/s021368/aggbug/2228473.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/s021368/archive/2011/10/29/2228473.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/s021368/archive/2011/10/29/2228472.html</id><title type="text">（转）MongoDB设置访问权限、设置用户</title><summary type="text">MongoDB已经使用很长一段时间了，基于MongoDB的数据存储也一直没有使用到权限访问（MongoDB默认设置为无权限访问限制），今天特地花了一点时间研究了一下，研究成果如下：注：研究成果基于Windows平台MongoDB在本机安装部署好后1. 输入命令：show dbs，你会发现它内置有两个数据库，一个名为admin，一个名为local。local好像没啥用，如果哪位在使用过程中发现了这个local表的用途，希望能够留言提醒，那我们就专心来说说admin表2. 输入命令：use admin，你会发现该DB下包含了一个system.user表，呵呵，没错，这个表就等同于MsSql中的用户</summary><published>2011-10-29T04:21:00Z</published><updated>2011-10-29T04:21:00Z</updated><author><name>阿龍</name><uri>http://www.cnblogs.com/s021368/</uri></author><link rel="alternate" href="http://www.cnblogs.com/s021368/archive/2011/10/29/2228472.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/s021368/archive/2011/10/29/2228472.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&#xD;
&lt;p&gt;MongoDB已经使用很长一段时间了，基于MongoDB的数据存储也一直没有使用到权限访问（&lt;span style="color: #ff0000;"&gt;MongoDB默认设置为无权限访问限制&lt;/span&gt;），今天特地花了一点时间研究了一下，研究成果如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #ff0000;"&gt;注：研究成果基于Windows平台&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;MongoDB在本机安装部署好后&lt;/p&gt;&#xD;
&lt;p&gt;1. 输入命令：show dbs，你会发现它内置有两个数据库，一个名为admin，一个名为local。local好像没啥用，如果哪位在使用过程中发现了这个local表的用途，希望能够留言提醒，那我们就专心来说说admin表&lt;/p&gt;&#xD;
&lt;p&gt;2. 输入命令：use admin，你会发现该DB下包含了一个system.user表，呵呵，没错，这个表就等同于MsSql中的用户表，用来存放超级管理员的，那我们就往它里面添加一个超级管理员试试看&lt;/p&gt;&#xD;
&lt;p&gt;3. 输入命令：db.addUser('sa','sa')，这里我添加一个超级管理员用户，username为sa，password也为sa，即然我们添 加了超级管理员，那咱们就来测试下，看看咱们再次连接MongoDB需不需要提示输入用户名、密码，我们先退出来(ctrl+c)&lt;/p&gt;&#xD;
&lt;p&gt;4. 输入命令：use admin&lt;/p&gt;&#xD;
&lt;p&gt;5. 输入命令：show collections，查看该库下所有的表，你会发现，MongoDB并没有提示你输入用户名、密码，那就奇怪了，这是怎么回事呢？在文章最开始提到了，&lt;/p&gt;&#xD;
&lt;p&gt;MongoDB默认设置为无权限访问限制，即然这样，那我们就先把它设置成为&lt;span style="color: #ff0000;"&gt;需要权限访问限制&lt;/span&gt;，咱们再看看效果，怎么设置呢？&lt;/p&gt;&#xD;
&lt;p&gt;6. 在注册表中，找到MongoDB的节点，在它的ImgPath中，我们修改一下，加入 &lt;span style="color: #ff0000;"&gt;&lt;strong&gt;-auth&lt;/strong&gt;&lt;/span&gt;，如下所示：&lt;/p&gt;&#xD;
&lt;p&gt;"D:\Program Files\mongodb\bin\mongod" -dbpath&amp;nbsp; e:\work\data\mongodb\db&amp;nbsp; -logpath&amp;nbsp; e:\work\data\mongodb\log &lt;span style="color: #ff0000;"&gt;&lt;strong&gt;-auth&lt;/strong&gt;&lt;/span&gt; -service&lt;/p&gt;&#xD;
&lt;p&gt;7. 输入命令：use admin&lt;/p&gt;&#xD;
&lt;p&gt;8. 输入命令：show collections，呵呵，我们发现无法查看该库下的表了，提示："$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1"，很明显，提示没有权限，看来关键就在于这里，我们在启动MongoDB时，需要加上&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;-auth&lt;/strong&gt;&lt;/span&gt;参数，这样我们设置的权限才能生效，好，接下来我们使用刚刚之前设置的用户名、密码来访问&lt;/p&gt;&#xD;
&lt;p&gt;9. 输入命令：db.auth('sa','sa')，输出一个结果值为1，说明这个用户匹配上了，如果用户名、密码不对，会输入0&lt;/p&gt;&#xD;
&lt;p&gt;10. 输入命令：show collections，呵呵，结果出来了，到这里，权限设置还只讲到一多半，接着往下讲，我们先退出来(ctrl+c)&lt;/p&gt;&#xD;
&lt;p&gt;11. 输入命令：mongo TestDB，我们尝试连接一个新的库（无论这个库是否存在，如果不存在，往该库中添加数据，会默认创建该库），然后，我们想看看该库中的表&lt;/p&gt;&#xD;
&lt;p&gt;12. 输入命令：show collections，好家伙，没权限，我们输入上面创建的用户名、密码&lt;/p&gt;&#xD;
&lt;p&gt;13. 输入命令：db.auth('sa','sa')，输入结果0，用户不存在，这下有人可能就不明白了，刚刚前面才创建，怎么会不存在呢？原因在于：当我们&lt;strong&gt;单独访问&lt;/strong&gt;MongoDB的数据库时，需要权限访问的情况下，用户名密码并非超级管理员，而是该库的system.user表中的用户，注意，我这里说的是&lt;strong&gt;单独访问&lt;/strong&gt;的情况，什么是&lt;strong&gt;不单独访问&lt;/strong&gt;的情况呢？接下来再讲，现在咋办，没权限，那我们就尝试给库的system.user表中添加用户&lt;/p&gt;&#xD;
&lt;p&gt;14. 输入命令：db.addUser('test','111111')，哇靠，仍然提示没有权限，这可咋办，新的数据库使用超级管理员也无法访问，创建用户也没有权限，呵呵，别急，即然设定了超级管理员用户，那它就一定有权限访问所有的库&lt;/p&gt;&#xD;
&lt;p&gt;15. 输入命令：use admin&lt;/p&gt;&#xD;
&lt;p&gt;16. 输入命令：db.auth('sa','sa')&lt;/p&gt;&#xD;
&lt;p&gt;17. 输入命令：use TestDB&lt;/p&gt;&#xD;
&lt;p&gt;18. 输入命令：show collections，哈哈，一路畅通无阻，我们发现可以利用超级管理员用户访问其它库了，呵呵，这个就是&lt;strong&gt;不单独访问&lt;/strong&gt;的 情况，不难发现，我们是先进入admin库，再转到其它库来的，admin相当于是一个最高级别官员所在区域，如果你是个地产商，想在地方弄个大工程做 做，你想不经过那些高级官员就做，这是行不通的，你需要先去到他们那里，送点礼，再顺着下到地方，工程你就可以拿到手了，此言论仅为个人观点，不代表博客 园；即然工程拿到手了，就要开始建了，那我们不至于每加块砖、添个瓦都得去和那帮高级官员打招呼吧，所以我们得让这个工程合法化，咱们得把相关的手续和证 件弄齐全，不至于是违建&lt;/p&gt;&#xD;
&lt;p&gt;19. 输入命令：db.addUser('test','111111')，我们给TestDB库添加一个用户，以后每次访问该库，我都使用刚刚创建的这个用户，我们先退出（ctrl+c）&lt;/p&gt;&#xD;
&lt;p&gt;20. 输入命令：mongo TestDB&lt;/p&gt;&#xD;
&lt;p&gt;21. 输入命令：show collections，提示没有权限&lt;/p&gt;&#xD;
&lt;p&gt;22. 输入命令：db.auth('test','111111')，输出结果1，用户存在，验证成功&lt;/p&gt;&#xD;
&lt;p&gt;23. 输入命令：show collections，没再提示我没有权限，恭喜您，成功了&lt;/p&gt;&#xD;
&lt;p&gt;好累啊！一口气写完，呵呵&lt;/p&gt;&#xD;
&lt;p&gt;注：当需要使用权限才能访问MongoDB时，如果需要查看MongoDB中所有的库，我们只能通过超级管理员权限，输入命令show dbs来查看了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;FROM URL:http://www.cnblogs.com/zengen/archive/2011/04/23/2025722.html&lt;/p&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/s021368/aggbug/2228472.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/s021368/archive/2011/10/29/2228472.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/s021368/archive/2011/09/28/2194590.html</id><title type="text">赎回收益率（Yield to Call，YTC）</title><summary type="text">赎回收益率出自 MBA智库百科(http://wiki.mbalib.com/)赎回收益率（Yield to Call，YTC）[编辑]什么是赎回收益率 若市场利率下调，对于不可赎回的债券来说，价格会上涨；但对于可赎回债券来说，当市场利率下调，债券价格上涨至赎回价格时，就存在被赎回的可能性，因此价格上涨存在压力。 若债券被赎回，投资者不可能将债券持有到期，因此到期收益率失去意义，从而需要引进赎回收益率的概念(yield to call)。 赎回收益率（YTC）以平均年收益率表示，用以衡量从购买日到债券被发行人购回日，个人从债券投资中得到的收益。YTC一般指的是第一赎回收益率，即假设赎回发...</summary><published>2011-09-28T08:42:00Z</published><updated>2011-09-28T08:42:00Z</updated><author><name>阿龍</name><uri>http://www.cnblogs.com/s021368/</uri></author><link rel="alternate" href="http://www.cnblogs.com/s021368/archive/2011/09/28/2194590.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/s021368/archive/2011/09/28/2194590.html"/><content type="html">&lt;h1 &gt;赎回收益率&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div id="bodyContent"&gt;&#xD;
&lt;h3 id="siteSub"&gt;出自 MBA智库百科(&lt;a href="http://wiki.mbalib.com/"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;http://wiki.mbalib.com/&lt;/span&gt;&lt;/a&gt;)&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div id="contentSub"&gt;&lt;/div&gt;&#xD;
&lt;!-- start content --&gt;&#xD;
&lt;p&gt;&lt;b&gt;赎回收益率（Yield to Call，YTC）&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;div  style="float: right; margin-left: 5px;"&gt;[&lt;a title="编辑段落: 什么是赎回收益率" href="http://wiki.mbalib.com/w/index.php?title=%E8%B5%8E%E5%9B%9E%E6%94%B6%E7%9B%8A%E7%8E%87&amp;amp;action=edit&amp;amp;section=1"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;编辑&lt;/span&gt;&lt;/a&gt;]&lt;/div&gt;&#xD;
&lt;a name=".E4.BB.80.E4.B9.88.E6.98.AF.E8.B5.8E.E5.9B.9E.E6.94.B6.E7.9B.8A.E7.8E.87"&gt;&lt;/a&gt;&#xD;
&lt;p&gt;&lt;strong&gt;什么是赎回收益率&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;若&lt;a title="市场利率" href="http://wiki.mbalib.com/wiki/%E5%B8%82%E5%9C%BA%E5%88%A9%E7%8E%87"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;市场利率&lt;/span&gt;&lt;/a&gt;下调，对于不可赎回的&lt;a title="债券" href="http://wiki.mbalib.com/wiki/%E5%80%BA%E5%88%B8"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;债券&lt;/span&gt;&lt;/a&gt;来说，价格会上涨；但对于&lt;a title="可赎回债券" href="http://wiki.mbalib.com/wiki/%E5%8F%AF%E8%B5%8E%E5%9B%9E%E5%80%BA%E5%88%B8"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;可赎回债券&lt;/span&gt;&lt;/a&gt;来说，当市场利率下调，&lt;a title="债券价格" href="http://wiki.mbalib.com/wiki/%E5%80%BA%E5%88%B8%E4%BB%B7%E6%A0%BC"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;债券价格&lt;/span&gt;&lt;/a&gt;上涨至赎回价格时，就存在被赎回的可能性，因此价格上涨存在压力。&lt;/p&gt;&#xD;
&lt;p&gt;若债券被赎回，投资者不可能将债券持有到期，因此&lt;a title="到期收益率" href="http://wiki.mbalib.com/wiki/%E5%88%B0%E6%9C%9F%E6%94%B6%E7%9B%8A%E7%8E%87"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;到期收益率&lt;/span&gt;&lt;/a&gt;失去意义，从而需要引进赎回收益率的概念(yield to call)。&lt;/p&gt;&#xD;
&lt;p&gt;赎回收益率（YTC）以平均年收益率表示，用以衡量从购买日到债券被发行人购回日，个人从&lt;a title="债券投资" href="http://wiki.mbalib.com/wiki/%E5%80%BA%E5%88%B8%E6%8A%95%E8%B5%84"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;债券投资&lt;/span&gt;&lt;/a&gt;中得到的&lt;a title="收益" href="http://wiki.mbalib.com/wiki/%E6%94%B6%E7%9B%8A"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;收益&lt;/span&gt;&lt;/a&gt;。YTC一般指的是第一赎回收益率，即假设赎回发生在第一次可赎回的时间，从购买到赎回的内在收益率。&lt;/p&gt;&#xD;
&lt;div  style="float: right; margin-left: 5px;"&gt;[&lt;a title="编辑段落: 赎回收益率的计算" href="http://wiki.mbalib.com/w/index.php?title=%E8%B5%8E%E5%9B%9E%E6%94%B6%E7%9B%8A%E7%8E%87&amp;amp;action=edit&amp;amp;section=2"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;编辑&lt;/span&gt;&lt;/a&gt;]&lt;/div&gt;&#xD;
&lt;a name=".E8.B5.8E.E5.9B.9E.E6.94.B6.E7.9B.8A.E7.8E.87.E7.9A.84.E8.AE.A1.E7.AE.97"&gt;&lt;/a&gt;&#xD;
&lt;p&gt;&lt;strong&gt;赎回收益率的计算&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;首次赎回收益率是累计到首次赎回日止，&lt;a title="利息" href="http://wiki.mbalib.com/wiki/%E5%88%A9%E6%81%AF"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;利息&lt;/span&gt;&lt;/a&gt;支付额与指定的赎回价格加总的现金流量酌现值等于&lt;a title="债券赎回" href="http://wiki.mbalib.com/wiki/%E5%80%BA%E5%88%B8%E8%B5%8E%E5%9B%9E"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;债券赎回&lt;/span&gt;&lt;/a&gt;价格的&lt;a title="利率" href="http://wiki.mbalib.com/wiki/%E5%88%A9%E7%8E%87"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;利率&lt;/span&gt;&lt;/a&gt;。赎回收益率的计算公式为：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img  alt="P=\sum_{t=1}^{n^*}\frac{C}{(1+Y)^t}+\frac{M^*}{(1+Y)^{n^*}}" src="http://wiki.mbalib.com/w/images/math/1/e/5/1e5b7170304765c27e281789ab657ea5.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;式中：&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;dl&gt;&lt;dd&gt;&lt;span &gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&lt;i&gt;n&lt;/i&gt;&lt;sup&gt;&lt;span style="font-size: x-small;" size="2"&gt; * &lt;/span&gt;&lt;/sup&gt;&lt;/span&gt;&lt;/span&gt;&amp;mdash;&amp;mdash;直至第一个赎回日的时期数(年数)；&lt;/dd&gt;&lt;dd&gt;&lt;span &gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&lt;i&gt;M&lt;/i&gt;&lt;sup&gt;&lt;span style="font-size: x-small;" size="2"&gt; * &lt;/span&gt;&lt;/sup&gt;&lt;/span&gt;&lt;/span&gt;&amp;mdash;&amp;mdash;赎回价格。&lt;/dd&gt;&lt;/dl&gt;&#xD;
&lt;p&gt;&lt;b&gt;举例说明:&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;甲、乙两债券均为10年期的可赎回债券(第一赎回时间为5年后)，赎回价格均为1100元，目前两债券的到期收益率均为7%。其中债券甲的&lt;a title="息票率" href="http://wiki.mbalib.com/wiki/%E6%81%AF%E7%A5%A8%E7%8E%87"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;息票率&lt;/span&gt;&lt;/a&gt;为5%，乙为8%。假设当&lt;a title="债券" href="http://wiki.mbalib.com/wiki/%E5%80%BA%E5%88%B8"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;债券&lt;/span&gt;&lt;/a&gt;的未来现金流的现值超过赎回价格时就立即执行赎回条款。若5年后市场利率下降到5%，问哪种债券会被赎回,赎回收益率为多少?&lt;/p&gt;&#xD;
&lt;p&gt;解:债券甲目前的价值为：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img  alt="\frac{25}{1+3.5%}+\frac{25}{(1+3.5%)^2}+K+\frac{1025}{(1+3.5%)^{20}}=928.94" src="http://wiki.mbalib.com/w/images/math/a/7/a/a7a56931cf7ff65ebfa0cf54447dc70e.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;当市场利率下降到5%时，债券甲的价值上升到1000元，债券甲不会被赎回。&lt;/p&gt;&#xD;
&lt;p&gt;债券乙目前的价值为：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img  alt="\frac{40}{1+3.5%}+\frac{40}{(1+3.5%)^2}+K+\frac{1040}{(1+3.5%)^{20}}=1071.06" src="http://wiki.mbalib.com/w/images/math/8/9/f/89ff8b0de09d92d890feb28a074485d5.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;5年后市场利率下降到5%，则其价值上升到：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img  alt="\frac{40}{1+2.5%}+\frac{40}{(1+2.5%)^2}+K+\frac{1040}{(1+2.5%)^{10}}=1131.28" src="http://wiki.mbalib.com/w/images/math/f/4/f/f4f759538a8653a0129fb5d2cafb2263.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这时债券乙将会以1100元的价格被赎回。&lt;/p&gt;&#xD;
&lt;p&gt;债券乙的第一赎回收益率为:&lt;/p&gt;&#xD;
&lt;dl&gt;&lt;dd&gt;&lt;img  alt="\frac{40}{1+k}+\frac{40}{(1+k)^2}+K+\frac{1100}{(1+k)^{10}}=1071.06" src="http://wiki.mbalib.com/w/images/math/e/d/d/edd83fe99e6e12d7b76bdcf8ba7495aa.png" /&gt;&lt;/dd&gt;&lt;dd&gt;k=3.96%&lt;/dd&gt;&lt;/dl&gt;&lt;!-- Tidy found serious XHTML errors --&gt;&lt;!-- Saved in parser cache with key wikidb:pcache:idhash:73302-0!1!0!!zh!2!zh and timestamp 20110824062250 --&gt;&#xD;
&lt;div &gt;来自"&lt;a href="http://wiki.mbalib.com/wiki/%E8%B5%8E%E5%9B%9E%E6%94%B6%E7%9B%8A%E7%8E%87"&gt;&lt;span style="color: #2153b0;" color="#2153b0"&gt;http://wiki.mbalib.com/wiki/%E8%B5%8E%E5%9B%9E%E6%94%B6%E7%9B%8A%E7%8E%87&lt;/span&gt;&lt;/a&gt;"&lt;/div&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/s021368/aggbug/2194590.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/s021368/archive/2011/09/28/2194590.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/s021368/archive/2011/09/28/2194494.html</id><title type="text">YTC, YTM, YTW</title><summary type="text">Yield To Call (YTC) 买回收益率 投资者买入并持有债券直至买回日可得的收益率。这个收益率只有在证券在到期前被买回才有效。买回收益率根据息票率、当时与买回日期相隔的距离以及市场价格而定Yield To Maturity (YTM) 到期收益率 投资者买入并持有债券直至到期日所得的收益。到期收益率被视为长期债券收益率，一般以年百分比表达 计算根据当时市场价格、面值、息票利率以及距离到期日时间，也假设所有息票以同样的利率进行再投资Yield To Worst (YTW) 取Min(YTC,YTM)Yield 收益率 1. 债券带来的收益，计算方法为债券利息除以价格 2. 投资的回报</summary><published>2011-09-28T07:42:00Z</published><updated>2011-09-28T07:42:00Z</updated><author><name>阿龍</name><uri>http://www.cnblogs.com/s021368/</uri></author><link rel="alternate" href="http://www.cnblogs.com/s021368/archive/2011/09/28/2194494.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/s021368/archive/2011/09/28/2194494.html"/><content type="html">&lt;div &gt;Yield To Call (YTC) 买回收益率 投资者买入并持有债券直至买回日可得的收益率。这个收益率只有在证券在到期前被买回才有效。买回收益率根据息票率、当时与买回日期相隔的距离以及市场价格而定&lt;/div&gt;&#xD;
&lt;div &gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;Yield To Maturity (YTM) 到期收益率 投资者买入并持有债券直至到期日所得的收益。到期收益率被视为长期债券收益率，一般以年百分比表达 计算根据当时市场价格、面值、息票利率以及距离到期日时间，也假设所有息票以同样的利率进行再投资&lt;/div&gt;&#xD;
&lt;div &gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div &gt;Yield To Worst (YTW) 取Min(YTC,YTM)&lt;/div&gt;&#xD;
&lt;div &gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;Yield 收益率 1. 债券带来的收益，计算方法为债券利息除以价格 2. 投资的回报率，一般以年度百分比表达&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/s021368/aggbug/2194494.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/s021368/archive/2011/09/28/2194494.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/s021368/articles/2177787.html</id><title type="text">(转)测试 MVC 之 Mock HttpContext</title><summary type="text">在 Web 中进行测试驱动的开发，比较大的困难是模拟 HttpContext ，它太复杂了。moq 框架提供了强大的模拟能力，但是，模拟一个 HttpContext 对象还是需要自己来动手。为此，我自己写了一个方法来完成这个工作。其中，还顺便使用 Log4Net 来输出一下它的工作情况。view sourceprint?01/// &amp;lt;summary&amp;gt; 02/// 创建上下文模拟对象 03/// 至少需要支持 04/// Request 中 05/// AppRelativeCurrentExecutionFilePath， 06/// ApplicationPath 07/// P</summary><published>2011-09-15T09:08:00Z</published><updated>2011-09-15T09:08:00Z</updated><author><name>阿龍</name><uri>http://www.cnblogs.com/s021368/</uri></author><link rel="alternate" href="http://www.cnblogs.com/s021368/articles/2177787.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/s021368/articles/2177787.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&#xD;
&lt;p&gt;在 Web 中进行测试驱动的开发，比较大的困难是模拟 HttpContext ，它太复杂了。&lt;/p&gt;&#xD;
&lt;p&gt;moq 框架提供了强大的模拟能力，但是，模拟一个 HttpContext 对象还是需要自己来动手。&lt;/p&gt;&#xD;
&lt;p&gt;为此，我自己写了一个方法来完成这个工作。其中，还顺便使用 Log4Net 来输出一下它的工作情况。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div  id="highlighter_891388"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a  title="view source" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/07/24/2115575.html#viewSource" commandname="viewSource" highlighterid="highlighter_891388"&gt;view source&lt;/a&gt;&lt;a  title="print" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/07/24/2115575.html#printSource" commandname="printSource" highlighterid="highlighter_891388"&gt;print&lt;/a&gt;&lt;a  title="?" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/07/24/2115575.html#about" commandname="about" highlighterid="highlighter_891388"&gt;?&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;span style="color: #808080;" color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;span style="color: #808080;" color="#808080"&gt;/// 创建上下文模拟对象&amp;nbsp; &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;span style="color: #808080;" color="#808080"&gt;/// 至少需要支持 &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;span style="color: #808080;" color="#808080"&gt;///&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Request 中 &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;span style="color: #808080;" color="#808080"&gt;///&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AppRelativeCurrentExecutionFilePath， &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;span style="color: #808080;" color="#808080"&gt;///&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ApplicationPath &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;span style="color: #808080;" color="#808080"&gt;///&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PathInfo &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;span style="color: #808080;" color="#808080"&gt;///&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response 中 &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;span style="color: #808080;" color="#808080"&gt;///&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ApplyAppPathModifier &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;span style="color: #808080;" color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;span style="color: #808080;" color="#808080"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt; &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;private&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Moq.Mock&amp;lt;System.Web.HttpContextBase&amp;gt; CreateHttpContext() &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;log4net.ILog log = log4net.LogManager.GetLogger(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"CreateHttpContext"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;15&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;16&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;ApplicationPath = &lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"/"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;17&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;PathInfo = &lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;""&lt;/span&gt;&lt;/code&gt;&lt;code &gt;; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;18&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;AppRelativeCurrentExecutionFilePath = &lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"~/"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;19&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;20&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;var contextMock = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Moq.Mock&amp;lt;System.Web.HttpContextBase&amp;gt;(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;21&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;22&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;contextMock &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;23&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Setup(c =&amp;gt; c.Request.AppRelativeCurrentExecutionFilePath) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;24&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Returns(AppRelativeCurrentExecutionFilePath) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;25&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Callback(() =&amp;gt; log.Info(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"Calling AppRelativeCurrentExecutionFilePath"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;)); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;26&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;27&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;contextMock &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;28&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Setup(c =&amp;gt; c.Request.ApplicationPath) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;29&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Returns(ApplicationPath) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;30&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Callback(() =&amp;gt; log.Info(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"Calling ApplicationPath"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;)); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;31&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;contextMock.Setup(rc =&amp;gt; rc.Request.PathInfo) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;32&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Returns(PathInfo) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;33&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Callback(() =&amp;gt; log.Info(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"Calling PathInfo"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;)); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;34&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;35&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;contextMock &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;36&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Setup(rc =&amp;gt; rc.Response.ApplyAppPathModifier(Moq.It.IsAny&amp;lt;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;&amp;gt;())) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;37&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Returns((&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;s) =&amp;gt; s) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;38&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Callback((&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;s) =&amp;gt; log.InfoFormat(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"Calling ApplyAppPathModifier: {0}."&lt;/span&gt;&lt;/code&gt;&lt;code &gt;, s)); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;39&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;40&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;contextMock; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;41&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;虽然这个方法已经能够完成我需要的测试，但是，我希望能将它提炼一下，得到一个更加通用的 Mock 方法。&lt;/p&gt;&#xD;
&lt;p&gt;很快，我发现这个工作已经在很久以前被&amp;nbsp;&lt;a href="http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx" target="_blank"&gt;&lt;span style="color: #009933;" color="#009933"&gt;Scott Hanselman &lt;/span&gt;&lt;/a&gt;介绍过一次了，其中甚至还写了不同的 Mock 框架下的提供方法。不过 moq 版本的作者不是他，而是另外一个人 Daniel Cazzulino，&amp;nbsp;这篇文章你可以在这里找到：&lt;a href="http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx"&gt;&lt;span style="color: #009933;" color="#009933"&gt;http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx&lt;/span&gt;&lt;/a&gt;，还可以顺便看一下 Daniel Cazzulino 的博客：&lt;a href="http://blogs.clariusconsulting.net/kzu/"&gt;&lt;span style="color: #009933;" color="#009933"&gt;http://blogs.clariusconsulting.net/kzu/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;不过，他的文章是在 2008 年写的，实在太古老了。当时还是 MVC 的 Preview2 ，moq 在那个时候就已经诞生了，看来我太孤陋寡闻了。&lt;/p&gt;&#xD;
&lt;p&gt;回到我们的主题，经过了这么长的时间，moq 已经有了一些变化，使用最新的 moq 语法修改之后，发现他的的代码没有能够通过测试。&lt;/p&gt;&#xD;
&lt;p&gt;与我的比较一下，发现其中少了对 Response 中 ApplyAppPathModifier 方法的支持，增加之后就正常了。&lt;/p&gt;&#xD;
&lt;p&gt;下面是修改之后的代码，希望能给你带来方便。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div  id="highlighter_64101"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a  title="view source" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/07/24/2115575.html#viewSource" commandname="viewSource" highlighterid="highlighter_64101"&gt;view source&lt;/a&gt;&lt;a  title="print" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/07/24/2115575.html#printSource" commandname="printSource" highlighterid="highlighter_64101"&gt;print&lt;/a&gt;&lt;a  title="?" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/07/24/2115575.html#about" commandname="about" highlighterid="highlighter_64101"&gt;?&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;001&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;System; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;002&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;System.Web; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;003&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;System.Text.RegularExpressions; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;004&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;System.IO; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;005&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;System.Collections.Specialized; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;006&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;System.Web.Mvc; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;007&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;System.Web.Routing; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;008&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;009&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Moq; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;010&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;011&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;namespace&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;UnitTests &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;012&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;013&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;static&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;class&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;MvcMockHelpers &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;014&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;015&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;static&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;HttpContextBase FakeHttpContext() &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;016&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;017&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;var context = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Mock&amp;lt;HttpContextBase&amp;gt;(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;018&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;var request = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Mock&amp;lt;HttpRequestBase&amp;gt;(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;019&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;var response = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Mock&amp;lt;HttpResponseBase&amp;gt;(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;020&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;var session = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Mock&amp;lt;HttpSessionStateBase&amp;gt;(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;021&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;var server = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Mock&amp;lt;HttpServerUtilityBase&amp;gt;(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;022&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;023&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 必须要设置 Response 的 ApplyAppPathModifier 方法支持 &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;024&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;response &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;025&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Setup(rsp =&amp;gt; rsp.ApplyAppPathModifier(Moq.It.IsAny&amp;lt;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;&amp;gt;())) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;026&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Returns((&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;s) =&amp;gt; s); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;027&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;028&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;context.Setup(ctx =&amp;gt; ctx.Request).Returns(request.Object); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;029&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;context.Setup(ctx =&amp;gt; ctx.Response).Returns(response.Object); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;030&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;context.Setup(ctx =&amp;gt; ctx.Session).Returns(session.Object); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;031&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;context.Setup(ctx =&amp;gt; ctx.Server).Returns(server.Object); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;032&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;033&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;context.Object; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;034&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;035&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;036&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;static&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;HttpContextBase FakeHttpContext(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;url) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;037&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;038&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;HttpContextBase context = FakeHttpContext(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;039&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;context.Request.SetupRequestUrl(url); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;040&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;context; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;041&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;042&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;043&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// Controller 的一个扩展方法 &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;044&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;static&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;void&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;SetFakeControllerContext(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;this&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Controller controller) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;045&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;046&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;var httpContext = FakeHttpContext(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;047&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;ControllerContext context = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;ControllerContext(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;RequestContext(httpContext, &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;RouteData()), controller); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;048&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;controller.ControllerContext = context; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;049&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;050&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;051&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;static&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;GetUrlFileName(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;url) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;052&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;053&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;if&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;(url.Contains(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"?"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;)) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;054&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;url.Substring(0, url.IndexOf(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"?"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;)); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;055&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;else&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;056&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;url; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;057&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;058&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;059&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;static&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;NameValueCollection GetQueryStringParameters(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;url) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;060&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;061&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;if&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;(url.Contains(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"?"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;)) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;062&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;063&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;NameValueCollection parameters = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;NameValueCollection(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;064&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;065&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;[] parts = url.Split(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"?"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;.ToCharArray()); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;066&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;[] keys = parts[1].Split(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"&amp;amp;"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;.ToCharArray()); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;067&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;068&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;foreach&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;key &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;in&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;keys) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;069&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;070&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;[] part = key.Split(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"="&lt;/span&gt;&lt;/code&gt;&lt;code &gt;.ToCharArray()); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;071&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;parameters.Add(part[0], part[1]); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;072&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;073&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;074&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;parameters; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;075&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;076&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;else&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;077&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;078&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;null&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;079&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;080&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;081&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;082&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 扩展 HttpRequestBase &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;083&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;static&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;void&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;SetHttpMethodResult(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;this&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;HttpRequestBase request, &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;httpMethod) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;084&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;085&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Mock.Get(request) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;086&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Setup(req =&amp;gt; req.HttpMethod) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;087&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Returns(httpMethod); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;088&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;089&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;090&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 设置请求的地址 &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;091&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;static&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;void&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;SetupRequestUrl(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;this&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;HttpRequestBase request, &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;url) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;092&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;093&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;log4net.ILog log = log4net.LogManager.GetLogger(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"CreateHttpContext"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;094&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;095&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;if&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;(url == &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;null&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;096&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;throw&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;ArgumentNullException(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"url"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;097&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;098&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;if&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;(!url.StartsWith(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"~/"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;)) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;099&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;throw&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;ArgumentException(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"Sorry, we expect a virtual url starting with \"~/\"."&lt;/span&gt;&lt;/code&gt;&lt;code &gt;); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;101&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;var mock = Mock.Get(request); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;102&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;103&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;mock.Setup(req =&amp;gt; req.QueryString) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;104&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Returns(GetQueryStringParameters(url)); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;105&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;mock.Setup(req =&amp;gt; req.AppRelativeCurrentExecutionFilePath) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;106&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Returns(GetUrlFileName(url)) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;107&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Callback(() =&amp;gt; log.Info(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"Calling AppRelativeCurrentExecutionFilePath"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;)); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;108&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;109&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;110&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;mock.Setup(req =&amp;gt; req.PathInfo) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;111&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;.Returns(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;.Empty); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;112&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;113&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;114&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;115&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code&gt;116&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;FROM: &lt;a href="http://www.cnblogs.com/haogj/archive/2011/07/24/2115575.html"&gt;http://www.cnblogs.com/haogj/archive/2011/07/24/2115575.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/s021368/aggbug/2177787.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/s021368/articles/2177787.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/s021368/articles/2177784.html</id><title type="text">(转)使用 NUnit Mocking .NET 对象</title><summary type="text">原文名称：Mocking .NET Objects with NUnit原文地址：http://www.zorched.net/2007/03/10/mocking-net-objects-with-nunit/NUnit 是我进行 .NET 开发的单元测试工具，Microsoft 也提供了一个测试框架，但是只能与高版本的 Visual Studio 一起工作，这个框架与 NUnit 非常相像。在 Java 中，通过 Mocking 来帮助测试非常方便，我曾经写过一篇使用 Java 的文章 using JMock for Unit Tesing，在这里，我会讨论一下 NUnit 现在支持的开箱</summary><published>2011-09-15T09:07:00Z</published><updated>2011-09-15T09:07:00Z</updated><author><name>阿龍</name><uri>http://www.cnblogs.com/s021368/</uri></author><link rel="alternate" href="http://www.cnblogs.com/s021368/articles/2177784.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/s021368/articles/2177784.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&#xD;
&lt;div&gt;原文名称：Mocking .NET Objects with NUnit&lt;/div&gt;&#xD;
&lt;div&gt;原文地址：&lt;a href="http://www.zorched.net/2007/03/10/mocking-net-objects-with-nunit/"&gt;&lt;span style="color: #009933;" color="#009933"&gt;http://www.zorched.net/2007/03/10/mocking-net-objects-with-nunit/&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="color: #009933;" color="#009933"&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;NUnit 是我进行 .NET 开发的单元测试工具，Microsoft 也提供了一个测试框架，但是只能与高版本的 Visual Studio 一起工作，这个框架与 NUnit 非常相像。在 Java 中，通过 Mocking 来帮助测试非常方便，我曾经写过一篇使用 Java 的文章 &lt;a href="http://www.zorched.net/2006/09/24/jmock-for-mocking-unit-tests/"&gt;&lt;span style="color: #009933;" color="#009933"&gt;using JMock for Unit Tesing&lt;/span&gt;&lt;/a&gt;，在这里，我会讨论一下 NUnit 现在支持的开箱即用的 Mock 支持。&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;什么是 Mock 对象？&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;Mock 对象是用来隔离测试依赖目标的技术，通过隔离使得我们可以细粒度地测试单个类中的单个方法， 可能在依赖的类完全实现之前进行。隔离可以使你的测试更快进行，使得测试一小片功能更加容易。当你通过隔离完成分离的一部分测试之后，就可以有信心进行更大粒度的测试，当你在处理像数据访问层或者 Web 服务层的依赖的时候，隔离会更有意义，外部的调用会花费很多的时间，或者在远程系统当机的时候可能会失败。&lt;/div&gt;&#xD;
&lt;div&gt;对于使用 Mock 对象来说，重要的是逼迫你考虑你的类和方法依赖的东西，它强迫你考虑你的类之间的耦合性，如果耦合性很高的话，就很难测试，如果耦合性弱的话，就非常容易测试。有关这些早期概念设计的考虑可以帮助你更加轻松地管理随时间推移带来变化。&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;要点&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;好的设计强于坏的设计&lt;/li&gt;&#xD;
&lt;li&gt;低耦合的对象经常好于强耦合的对象&lt;/li&gt;&#xD;
&lt;li&gt;随着时间的推移，测试可以提高代码的质量和开发效率&lt;/li&gt;&#xD;
&lt;li&gt;低耦合的设计容易测试&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;示例项目&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div&gt;下面我们使用一个例子来演示一下，我们创建一个 Person 的领域对象，和一个名为 IPersonRepository 的数据访问接口，这时候非常简单。&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div  id="highlighter_267037"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a  title="view source" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#viewSource" commandname="viewSource" highlighterid="highlighter_267037"&gt;view source&lt;/a&gt;&lt;a  title="print" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#printSource" commandname="printSource" highlighterid="highlighter_267037"&gt;print&lt;/a&gt;&lt;a  title="?" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#about" commandname="about" highlighterid="highlighter_267037"&gt;?&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;class&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Person &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Id; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;FirstName; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;LastName; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Person(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;newId, &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;fn, &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;ln) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Id = newId; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;FirstName = fn; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;LastName = ln; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;接口的定义&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div  id="highlighter_411479"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a  title="view source" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#viewSource" commandname="viewSource" highlighterid="highlighter_411479"&gt;view source&lt;/a&gt;&lt;a  title="print" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#printSource" commandname="printSource" highlighterid="highlighter_411479"&gt;print&lt;/a&gt;&lt;a  title="?" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#about" commandname="about" highlighterid="highlighter_411479"&gt;?&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;interface&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;IPersonRepository &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;List&amp;lt;Person&amp;gt; GetPeople(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Person GetPersonById(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;id); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;然后，我们创建一个 PersonService 类，在我们的程序中，用来实现业务逻辑，它将使用数据访问层，然后为 UI 层返回信息。&lt;/div&gt;&#xD;
&lt;div&gt;我们使用 DI 的构造函数注入来把他们连接在一起，所有依赖的对象都通过构造函数来传送。这样 PersonService 除了接口之外，就不需要知道具体的实现类，以实现低耦合。这样，在构造函数中我们不能传递一个无效的 PersonService 。&lt;/div&gt;&#xD;
&lt;div&gt;下面是一个简单的实现，但是我希望它能够表达它的使用。&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div  id="highlighter_480882"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a  title="view source" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#viewSource" commandname="viewSource" highlighterid="highlighter_480882"&gt;view source&lt;/a&gt;&lt;a  title="print" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#printSource" commandname="printSource" highlighterid="highlighter_480882"&gt;print&lt;/a&gt;&lt;a  title="?" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#about" commandname="about" highlighterid="highlighter_480882"&gt;?&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;class&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;PersonService &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;private&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;IPersonRepository personRepos; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;PersonService(IPersonRepository repos) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;personRepos = repos; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;List&amp;lt;Person&amp;gt; GetAllPeople() &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;personRepos.GetPeople(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;List&amp;lt;Person&amp;gt; GetAllPeopleSorted() &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;List&amp;lt;Person&amp;gt; people = personRepos.GetPeople(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;people.Sort(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;delegate&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;(Person lhp, Person rhp) {&amp;nbsp; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;lhp.LastName.CompareTo(rhp.LastName);&amp;nbsp; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;}); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;people; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Person GetPerson(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;id) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;try&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;personRepos.GetPersonById(id); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;catch&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;(ArgumentException) &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;null&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;; &lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// no person with that id was found &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用 NUnit 进行 Mock&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div&gt;现在，我们可以开始测试我们的 PersonService。甚至我们还没有任何 IPersonRepository 的实现，使用 Mock 我们不需要考虑应用程序中其他层，就可以检查我们的 PersonService 是否如我们希望的完成任何任务。&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div  id="highlighter_154573"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a  title="view source" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#viewSource" commandname="viewSource" highlighterid="highlighter_154573"&gt;view source&lt;/a&gt;&lt;a  title="print" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#printSource" commandname="printSource" highlighterid="highlighter_154573"&gt;print&lt;/a&gt;&lt;a  title="?" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#about" commandname="about" highlighterid="highlighter_154573"&gt;?&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;System; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;System.Collections.Generic; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;NUnit.Framework; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;using&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;NUnit.Mocks; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;[TestFixture] &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;class&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;PersonServiceTest &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 我们用来实现&amp;nbsp;IPersonRepository 的动态代理 &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;private&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;DynamicMock personRepositoryMock; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 一些测试数据 &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;private&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Person onePerson = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Person(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"1"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;, &lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"Wendy"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;, &lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"Whiner"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;private&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Person secondPerson = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;Person(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"2"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;, &lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"Aaron"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;, &lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"Adams"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;private&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;List&amp;lt;Person&amp;gt; peopleList; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;[SetUp] &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;void&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;TestInit() &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;peopleList = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;List&amp;lt;Person&amp;gt;(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;peopleList.Add(onePerson); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;peopleList.Add(secondPerson); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 使用接口 IPersonRepository 创建动态 Mock 对象 &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;personRepositoryMock = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;DynamicMock(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;typeof&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;(IPersonRepository)); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;[Test] &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;void&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;TestGetAllPeople() &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 当调用&amp;nbsp; "GetPeople" 方法的时候，返回一个&amp;nbsp; &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 预定义列表&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div  id="highlighter_599288"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;a  title="view source" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#viewSource" commandname="viewSource" highlighterid="highlighter_599288"&gt;view source&lt;/a&gt;&lt;a  title="print" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#printSource" commandname="printSource" highlighterid="highlighter_599288"&gt;print&lt;/a&gt;&lt;a  title="?" style="width: 16px; height: 16px;" href="http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html#about" commandname="about" highlighterid="highlighter_599288"&gt;?&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;personRepositoryMock.ExpectAndReturn(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"GetPeople"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;, peopleList); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 使用 IPersonRepository 的 Mock 对象来创建 PersonService&amp;nbsp; &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;PersonService service = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;PersonService( &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;(IPersonRepository) personRepositoryMock.MockInstance); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 调用方法并进行断言 &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Assert.AreEqual(2, service.GetAllPeople().Count); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;[Test] &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;void&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;TestGetAllPeopleSorted() &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;personRepositoryMock.ExpectAndReturn(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"GetPeople"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;, peopleList); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;PersonService service = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;PersonService( &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;(IPersonRepository) personRepositoryMock.MockInstance); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// This method really has "business logic" in it - the sorting of people &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;List&amp;lt;Person&amp;gt; people = service.GetAllPeopleSorted(); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Assert.IsNotNull(people); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Assert.AreEqual(2, people.Count); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// Make sure the first person returned is the correct one &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Person p = people[0]; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Assert.AreEqual(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"Adams"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;, p.LastName); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;[Test] &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;void&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;TestGetSinglePersonWithValidId() &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 当调用 "GetPerson" 方法的时候返回一个预定义的 Person&amp;nbsp; &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;personRepositoryMock.ExpectAndReturn(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"GetPersonById"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;, onePerson, &lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"1"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;PersonService service = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;PersonService( &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;(IPersonRepository) personRepositoryMock.MockInstance); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Person p = service.GetPerson(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"1"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Assert.IsNotNull(p); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Assert.AreEqual(p.Id, &lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"1"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;[Test] &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;void&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;TestGetSinglePersonWithInalidId() &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;{ &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 当传递一个 null 调用 "GetPersonById" 方法的时候 &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// 抛出异常 ArgumentException &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;personRepositoryMock.ExpectAndThrow(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"GetPersonById"&lt;/span&gt;&lt;/code&gt;&lt;code &gt;,&amp;nbsp; &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;ArgumentException(&lt;/code&gt;&lt;code &gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;"Invalid person id."&lt;/span&gt;&lt;/code&gt;&lt;code &gt;), &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;null&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;PersonService service = &lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code &gt;PersonService( &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;(IPersonRepository) personRepositoryMock.MockInstance); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// The only way to get null is if the underlying IPersonRepository&amp;nbsp; &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;&lt;span style="color: #008200;" color="#008200"&gt;// threw an ArgumentException &lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;Assert.IsNull(service.GetPerson(&lt;/code&gt;&lt;code &gt;&lt;strong&gt;&lt;span style="color: #006699;" color="#006699"&gt;null&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code &gt;)); &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code &gt;} &lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;code &gt;}&lt;/code&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;现在的 PersonService 没有什么真正的逻辑，我希望它能帮助你理解如何简单地通过 Mock 对象来进行各种条件的测试。&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;虽然 NUnit 内置的 Mock 库不是最强大的 Mock 库，还是应该充分使用它，我相信随着时间的推移，它将会变得更加强大。&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;源码下载：&lt;a title="NMock C# Example Project" href="http://www.zorched.net/wp-content/uploads/2007/03/nmock-example.zip"&gt;&lt;span style="color: #009933;" color="#009933"&gt;NMock C# Example Project&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;FROM: http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html&lt;/div&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/s021368/aggbug/2177784.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/s021368/articles/2177784.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/s021368/articles/2177782.html</id><title type="text">(转)moq 的常用使用方法</title><summary type="text">测试方法1//准备MockIFoo接口2varmock=newMock&amp;lt;IFoo&amp;gt;();3//配置准备模拟的方法，当调用接口中的DoSomething方法，并传递参数&amp;quot;bing&amp;quot;的时候，返回true4mock.Setup(foo=&amp;gt;foo.DoSomething(&amp;quot;ping&amp;quot;)).Returns(true);56//方法的参数中使用了out参数7//outarguments8varoutString=&amp;quot;ack&amp;quot;;9//当调用TryParse方法的时候，out参数返回&amp;quot;ack&amp;quot;,方法返回true,l</summary><published>2011-09-15T09:05:00Z</published><updated>2011-09-15T09:05:00Z</updated><author><name>阿龍</name><uri>http://www.cnblogs.com/s021368/</uri></author><link rel="alternate" href="http://www.cnblogs.com/s021368/articles/2177782.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/s021368/articles/2177782.html"/><content type="html">&lt;p&gt;&lt;strong&gt;测试方法&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;准备&amp;nbsp;Mock&amp;nbsp;IFoo&amp;nbsp;接口&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;mock&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Mock&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IFoo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;配置准备模拟的方法，当调用接口中的&amp;nbsp;DoSomething&amp;nbsp;方法，并传递参数&amp;nbsp;"bing"&amp;nbsp;的时候，返回&amp;nbsp;true&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.DoSomething(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ping&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)).Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;方法的参数中使用了&amp;nbsp;out&amp;nbsp;参数&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;out&amp;nbsp;arguments&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;outString&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ack&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;当调用&amp;nbsp;TryParse&amp;nbsp;方法的时候，out&amp;nbsp;参数返回&amp;nbsp;"ack",&amp;nbsp;方法返回&amp;nbsp;true,&amp;nbsp;lazy&amp;nbsp;evaluated&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.TryParse(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ping&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;out&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;outString)).Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;ref&amp;nbsp;参数&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;instance&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Bar();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;仅仅在使用&amp;nbsp;ref&amp;nbsp;调用的时候，才会匹配下面的测试&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Submit(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;instance)).Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;当方法返回值得时候，还可以访问返回的值&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;这里可以使用多个参数&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;x.DoSomething(It.IsAny&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;()))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Returns((&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;s)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;s.ToLower());&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;在被调用的时候抛出异常&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.DoSomething(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;reset&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)).Throws&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;InvalidOperationException&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.DoSomething(&lt;/span&gt;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #000000;"&gt;)).Throws(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ArgumentException(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;command&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;延迟计算返回的结果&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.GetCount()).Returns(()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;count);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;29&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;在每一次调用的时候，返回不同的值&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;30&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;mock&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Mock&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IFoo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;31&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;var&amp;nbsp;calls&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;32&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.GetCountThing())&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;33&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Returns(()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;calls)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;34&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Callback(()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;calls&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;35&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;36&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;第一次调用返回&amp;nbsp;0，&amp;nbsp;下一次是&amp;nbsp;1，&amp;nbsp;依次类推&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;37&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Console.WriteLine(mock.Object.GetCountThing());&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;匹配参数&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;任意值&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.DoSomething(It.IsAny&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;())).Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;提供的值必须匹配一个函数,&amp;nbsp;lazy&amp;nbsp;evaluated&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Add(It.Is&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;%&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;))).Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;匹配一个范围&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Add(It.IsInRange&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;Range.Inclusive))).Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;匹配正则表达式&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;x.DoSomething(It.IsRegex(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;[a-d]+&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;RegexOptions.IgnoreCase))).Returns(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;foo&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;普通属性&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Name).Returns(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;bar&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;多层的属性&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Bar.Baz.Name).Returns(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;baz&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;期望设置属性的值为&amp;nbsp;"foo"&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.SetupSet(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Name&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;foo&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;或者直接验证赋值&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.VerifySet(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Name&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;foo&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;设置属性，以便自动跟踪它的值&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;开始&amp;nbsp;"tracking"&amp;nbsp;属性的&amp;nbsp;sets/gets&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.SetupProperty(f&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;f.Name);&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;提供一个默认的值&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.SetupProperty(f&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;f.Name,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;foo&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;现在，你可以:&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IFoo&amp;nbsp;foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;mock.Object;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;保存的值&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Assert.Equal(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;foo&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;foo.Name);&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;重新设置一个值&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;foo.Name&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;bar&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;Assert.Equal(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;bar&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;foo.Name);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;还可以准备所有的属性&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000;"&gt;mock.SetupAllProperties();&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;事件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;抛出一个事件&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Raise(m&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;m.FooEvent&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FooEventArgs(fooValue));&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;多层的后代中的事件&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Raise(m&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;m.Child.First.FooEvent&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FooEventArgs(fooValue));&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;当&amp;nbsp;Submit&amp;nbsp;方法被调用的时候，抛出一个事件&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Submit()).Raises(f&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;f.Sent&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;EventArgs.Empty);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;抛出异常将会触发对象底层的行为&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;你可能需要在后面进行断言处理&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;抛出一个自定义的事件&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;delegate&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;MyEventHandler(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;i,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;b);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;interface&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;IFoo&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;event&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;MyEventHandler&amp;nbsp;MyEvent;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;var&amp;nbsp;mock&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Mock&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IFoo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;...&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;传递自定义的事件参数&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Raise(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.MyEvent&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;25&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;回调&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;var&amp;nbsp;mock&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Mock&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IFoo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Execute(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ping&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Callback(()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;calls&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;使用调用的参数&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Execute(It.IsAny&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;()))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Callback((&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;s)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;calls.Add(s));&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;使用泛型语法&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Execute(It.IsAny&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;()))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Callback&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(s&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;calls.Add(s));&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;使用多个参数&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Execute(It.IsAny&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(),&amp;nbsp;It.IsAny&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;()))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Callback&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;((i,&amp;nbsp;s)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;calls.Add(s));&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;调用之前和之后的回调&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Execute(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ping&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Callback(()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Before&amp;nbsp;returns&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Callback(()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;After&amp;nbsp;returns&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;验证&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;mock.Verify(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Execute(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ping&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;在验证失败的时候，提供自定义的错误提示信息&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Verify(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Execute(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ping&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;When&amp;nbsp;doing&amp;nbsp;operation&amp;nbsp;X,&amp;nbsp;the&amp;nbsp;service&amp;nbsp;should&amp;nbsp;be&amp;nbsp;pinged&amp;nbsp;always&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;从没有被调用的方法&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Verify(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Execute(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ping&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&amp;nbsp;Times.Never());&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;至少调用过一次&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Verify(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Execute(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ping&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&amp;nbsp;Times.AtLeastOnce());&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;mock.VerifyGet(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Name);&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;验证对属性的赋值.&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.VerifySet(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Name);&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;验证对于属性设置特定的值&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.VerifySet(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Name&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;foo&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;验证匹配的参数&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.VerifySet(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Value&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;It.IsInRange(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;Range.Inclusive));&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;自定义 Mock 行为&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Mock 的行为分为严格的 Strict 和宽松的 Loose， 默认为宽松的。在严格模式下，使用任何没有被指定的行为，都将会抛出异常，宽松模式下，不会抛出任何异常，方法将会返回默认值或者空的数组等等。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;mock&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Mock&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IFoo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(MockBehavior.Strict);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果没有重写基类的实现，默认将不会调用基类，在 Mock Web/Html 控件的是必须的。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;mock&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Mock&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IFoo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;{&amp;nbsp;CallBase&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;};&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;创造自动递归的 Mock, Mock 对象对于它的任何成员将会返回一个新的 Mock 对象。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;mock&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Mock&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IFoo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;{&amp;nbsp;DefaultValue&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;DefaultValue.Mock&amp;nbsp;};&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;默认是&amp;nbsp;DefaultValue.Empty&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;现在这个属性将会返回一个新的&amp;nbsp;Mock&amp;nbsp;对象&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IBar&amp;nbsp;value&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;mock.Object.Bar;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;可以使用返回的&amp;nbsp;Mock&amp;nbsp;对象,&amp;nbsp;后即对属性的访问返回相同的对象实例&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;这就允许我们可以进行后继的设置&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;set&amp;nbsp;further&amp;nbsp;expectations&amp;nbsp;on&amp;nbsp;it&amp;nbsp;if&amp;nbsp;we&amp;nbsp;want&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;barMock&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Mock.Get(value);&amp;nbsp;&lt;br /&gt;barMock.Setup(b&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;b.Submit()).Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;中心化的 Mock 实例创建和管理：你可以在一个地方使用 MockRepository 创建和验证所有的 Mock 对象，设置 MockBehavior, CallBse 和 DefaultValue 约束。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;factory&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;MockFactory(MockBehavior.Strict)&amp;nbsp;{&amp;nbsp;DefaultValue&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;DefaultValue.Mock&amp;nbsp;};&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;创建&amp;nbsp;Mock&amp;nbsp;对象&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;fooMock&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;factory.Create&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IFoo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;在创建的时候重写仓库的设置&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;barMock&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;factory.Create&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IBar&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(MockBehavior.Loose);&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;验证通过仓库创建的对象&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;factory.Verify();&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;其它&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;用在测试用例的开始&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Moq.Protected()&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;测试中&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;mock&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Mock&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;CommandBase&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;mock.Protected()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Setup&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Execute&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Returns(&lt;/span&gt;&lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;如果用到了参数匹配,&amp;nbsp;必须使用&amp;nbsp;ItExpr&amp;nbsp;来代替&amp;nbsp;It&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;以后计划改进&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Protected()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Setup&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Execute&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ItExpr.IsAny&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;高级特性&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;从&amp;nbsp;Mock&amp;nbsp;实例重新获得&amp;nbsp;Mock&amp;nbsp;对象&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IFoo&amp;nbsp;foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;get&amp;nbsp;mock&amp;nbsp;instance&amp;nbsp;somehow&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;fooMock&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Mock.Get(foo);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;fooMock.Setup(f&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;f.Submit()).Returns(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;实现多个接口&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Mock&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IFoo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;var&amp;nbsp;disposableFoo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.As&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IDisposable&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;现在&amp;nbsp;IFoo&amp;nbsp;mock&amp;nbsp;已经实现了接口&amp;nbsp;IDisposable&amp;nbsp;:)&amp;nbsp;disposableFoo.Setup(df&amp;nbsp;=&amp;gt;&amp;nbsp;df.Dispose());&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;定制匹配&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;mock.Setup(foo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;foo.Submit(IsLarge())).Throws&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;ArgumentException&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;...&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;IsLarge()&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Match&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Create(s&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #000000;"&gt;String.IsNullOrEmpty(s)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;s.Length&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;FROM: http://www.cnblogs.com/haogj/archive/2011/07/22/2113496.html&lt;/p&gt;&lt;img src="http://www.cnblogs.com/s021368/aggbug/2177782.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/s021368/articles/2177782.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/s021368/articles/2177571.html</id><title type="text">（转）如何测试私有/受保护的方法</title><summary type="text">1. 简介Test Driven Development 的步骤是先写测试，然后写代码让测试通过，然后再重构。这些概念在.net环境中由于对软件质量要求的提高，越来越受到重视。测试公有方法是很容易的，自然而然的就有问题产生了“如何测试protected或private方法”？本文包括： l 总结一些测试私有方法的常用做法；l 给出一些有用的方法，即使你不知道哪种方法最优；l 提高代码演示这些测试技术。2. 背景2.1. 是否应该测试私有方法？在GOOGLE(Google search)上搜索一下就会发现无数相关讨论，更不用说实际的测试实现了。下面的表格对这些讨论做了总结，并把利弊都列出如下： </summary><published>2011-09-15T06:59:00Z</published><updated>2011-09-15T06:59:00Z</updated><author><name>阿龍</name><uri>http://www.cnblogs.com/s021368/</uri></author><link rel="alternate" href="http://www.cnblogs.com/s021368/articles/2177571.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/s021368/articles/2177571.html"/><content type="html">&lt;p  style="margin: 17pt 0cm 16.5pt 21.25pt; text-align: left; mso-pagination: widow-orphan; mso-outline-level: 1;" align="left"&gt;&lt;a name="_Toc99980654"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 24pt; color: black; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;"&gt;1.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc99980654;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 7pt; color: black;" times="" new="" roman="" mso-font-kerning:="" 18="" 0pt=""&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980654;"&gt;&lt;b&gt;&lt;span style="font-size: 24pt; color: black; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;简介&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980654;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 24pt; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;a href="http://www.testdriven.com/"&gt;Test Driven Development&lt;/a&gt; &lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;的步骤是先写测试，然后写代码让测试通过，然后再重构。这些概念在&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;.net&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;环境中由于对软件质量要求的提高，越来越受到重视。测试公有方法是很容易的，自然而然的就有问题产生了&amp;ldquo;如何测试&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;protected&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;或&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;private&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;方法&amp;rdquo;？本文包括：&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;总结一些测试私有方法的常用做法；&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;给出一些有用的方法，即使你不知道哪种方法最优；&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;提高代码演示这些测试技术。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 17pt 0cm 16.5pt 21.25pt; text-align: left; mso-pagination: widow-orphan; mso-outline-level: 1;" align="left"&gt;&lt;a name="_Toc99980655"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 24pt; color: black; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;"&gt;2.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc99980655;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 7pt; color: black;" times="" new="" roman="" mso-font-kerning:="" 18="" 0pt=""&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980655;"&gt;&lt;b&gt;&lt;span style="font-size: 24pt; color: black; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;背景&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980655;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 24pt; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 1cm; text-align: left; mso-pagination: widow-orphan; mso-outline-level: 2; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;" align="left"&gt;&lt;a name="_Toc99980656"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 13.5pt; color: #ff9900; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: Verdana;"&gt;2.1.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc99980656;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 7pt; color: #ff9900; mso-font-kerning: 0pt; mso-fareast-font-family: Verdana;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980656;"&gt;&lt;b&gt;&lt;span style="font-size: 13.5pt; color: #ff9900; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;是否应该测试私有方法？&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980656;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 18pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;在&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;GOOGLE(&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=test+public+protected+methods&amp;amp;btnG=Google+Search"&gt;&lt;span style="mso-bidi-font-size: 12.0pt;"&gt;Google search&lt;/span&gt;&lt;/a&gt;)&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;上搜索一下就会发现无数相关讨论，更不用说实际的测试实现了。下面的表格对这些讨论做了总结，并把利弊都列出如下：&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;table  style="width: 100%; border-collapse: collapse; mso-border-alt: outset #111111 .75pt; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt;" cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr style="height: 22.5pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes;"&gt;&#xD;
&lt;td style="background: #ffffcc; width: 19%; height: 22.5pt; mso-border-alt: inset #111111 .75pt; border: #111111 1pt inset; padding: 1.5pt;" width="19%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;观点&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #111111 1pt inset; background: #ffffcc; border-left: #ece9d8; width: 40%; border-bottom: #111111 1pt inset; height: 22.5pt; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; padding: 1.5pt;" width="40%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;利&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #111111 1pt inset; background: #ffffcc; border-left: #ece9d8; width: 41%; border-bottom: #111111 1pt inset; height: 22.5pt; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; padding: 1.5pt;" width="41%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;弊&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="height: 22.5pt; mso-yfti-irow: 1;"&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #111111 1pt inset; width: 19%; border-bottom: #111111 1pt inset; height: 22.5pt; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="19%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;使用私有方法&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 40%; border-bottom: #111111 1pt inset; height: 22.5pt; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="40%"&gt;&#xD;
&lt;ul type="disc"&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo1;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;封装&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;-&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;私有函数提供了封装，方便了客户端的调用。&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo1;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;重构&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;- &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;重构私有方法很容易，因为没有被外部调用，因此修改其声明方式不会破坏外面的任何调用。&lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo1;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;校验&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;- &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;不象公有方法必须要校验外部的输入数据，私有方法不需要复杂的校验（因为在公有方法中已经校验过）。&lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo1;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;测试范围&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;- &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;将所有方法设成公有，扩大了测试的范围。私有方法只有在开发人员需要时才测试，公有方法使用广泛，必须要全部测试。&lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 41%; border-bottom: #111111 1pt inset; height: 22.5pt; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="41%"&gt;&#xD;
&lt;ul type="disc"&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l6 level1 lfo2;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;不重构&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;- &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;如果一个类复杂到不需要使用私有方法，则应该进行重构。&lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l6 level1 lfo2;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;功能隐藏&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;- &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;私有方法（如果设计正确的话）提供了有用的特性，如果需要客户端访问而测试的话，则应该设置为公有。&lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="height: 22.5pt; mso-yfti-irow: 2; mso-yfti-lastrow: yes;"&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #111111 1pt inset; width: 19%; border-bottom: #111111 1pt inset; height: 22.5pt; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="19%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;测试私有方法&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 40%; border-bottom: #111111 1pt inset; height: 22.5pt; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="40%"&gt;&#xD;
&lt;ul type="disc"&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l4 level1 lfo3;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;测试控制&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;- &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;私有方法可能包含了复杂的逻辑，测试应该包含这些方法的测试，而不能因为公有方法中调用了这些方法就认为没有问题。&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l4 level1 lfo3;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;原则&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;- &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;单元测试用于测试最小的代码片段，私有方法是一段功能代码，因此应该被测试。&lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 41%; border-bottom: #111111 1pt inset; height: 22.5pt; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="41%"&gt;&#xD;
&lt;ul type="disc"&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo4;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;已经覆盖&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;- &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;只有公共接口应该被测试，在测试公有方法时已经内部调用测试了私有方法。&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo4;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;不好的代码&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &amp;ndash; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;如果你重构代码的时候改变了私有方法，并且你的测试中连接到了相关的私有方法，则你需要再修改测试代码。&lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;赞成和反对的人都是比较厉害的角色。我既不打算也不期望结束这些争论，我只想了解他们各自在测试中的用处。即使你不想测试私有方法：&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;但如果你知道如何测试，你的意见就更有效（而不会因为你不知道就简单的说&amp;ldquo;不测试&amp;rdquo;）；&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;针对测试非公有方法可以帮助你的团队工作的更好；&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;只要可能，就值得找到一个简便的方法测试他们。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 1cm; text-align: left; mso-pagination: widow-orphan; mso-outline-level: 2; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;" align="left"&gt;&lt;a name="_Toc99980657"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 13.5pt; color: #ff9900; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: Verdana;"&gt;2.2.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc99980657;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 7pt; color: #ff9900; mso-font-kerning: 0pt; mso-fareast-font-family: Verdana;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980657;"&gt;&lt;b&gt;&lt;span style="font-size: 13.5pt; color: #ff9900; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;好的标准和不准确的技术&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980657;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 18pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;i&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;Andrew Hunt and David Thomas &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;在他的书中&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;, &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0974514020/002-0202185-0492070"&gt;Pragmatic Unit Testing in C# with NUnit&lt;/a&gt;, &lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;说明好的单元测试应该具有下面的特点（&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;ATRIP&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;）：&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;自动化；&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;充分；&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;可重复；&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;独立的；&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;专业的；&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;针对私有&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;/&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;保护方法的完全测试，还有其它三项标准&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;透明：不要修改系统到测试环境（&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;system under test&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;），如在发布代码中封装测试代码；&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;范围：能在&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;debug/release&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;模式下运行；&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; text-align: left; mso-pagination: widow-orphan; tab-stops: list 21.0pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"&gt;l&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 7pt; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings;"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;简单性：使用简单，易于修改且风险小。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;记住这些标准，这里有几个简单的策略：&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;table  style="width: 100%; border-collapse: collapse; mso-border-alt: outset #111111 .75pt; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt;" cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;"&gt;&#xD;
&lt;td style="background: #ffffcc; width: 50%; mso-border-alt: inset #111111 .75pt; border: #111111 1pt inset; padding: 1.5pt;" width="50%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;策略&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #111111 1pt inset; background: #ffffcc; border-left: #ece9d8; width: 50%; border-bottom: #111111 1pt inset; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; padding: 1.5pt;" width="50%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;问题&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="mso-yfti-irow: 1;"&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #111111 1pt inset; width: 50%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="50%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;不要有任何私有方法&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 50%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="50%"&gt;&#xD;
&lt;ul type="disc"&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level1 lfo5;"&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;回避了这个问题。&lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="mso-yfti-irow: 2;"&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #111111 1pt inset; width: 50%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="50%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;使用&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: navy;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;#if DEBUG ... #endif&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;封装私有方法为公有方法，这样测试方法就可以通过公有的封装接口访问私有方法。（但此方法背离了&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;OO&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;思想）&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;.&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 50%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="50%"&gt;&#xD;
&lt;ul type="disc"&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l7 level1 lfo6;"&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;这种方法只能在调试模式有效。&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l7 level1 lfo6;"&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;过程式而非&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;OO&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;。需要在发布和单元测试中封装各个方法。&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l7 level1 lfo6;"&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;通过增加公有方法违背了上面的准则。&lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="mso-yfti-irow: 3;"&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #111111 1pt inset; width: 50%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="50%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;在封装私有方法的公有接口上使用&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;[Conditional(&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;"DEBUG"&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;)]&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;属性&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 50%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="50%"&gt;&#xD;
&lt;ul type="disc"&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo7;"&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;只能在调试模式下工作。&lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="mso-yfti-irow: 4; mso-yfti-lastrow: yes;"&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #111111 1pt inset; width: 50%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="50%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;创建内部方法访问这些私有方法，并在程序集中其它地方声明一些公有方法封装这些内部方法。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 50%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="50%"&gt;&#xD;
&lt;ul type="disc"&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l5 level1 lfo8;"&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;这修改了发布产品的代码，并使得发布产品中包含有测试代码。&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li  style="margin: 0cm 0cm 0pt; color: black; text-align: left; mso-pagination: widow-orphan; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l5 level1 lfo8;"&gt;&lt;span style="font-size: 10pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;需要大量额外的编程，而且容易有问题。&lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p  style="margin: 17pt 0cm 16.5pt 21.25pt; text-align: left; mso-pagination: widow-orphan; mso-outline-level: 1;" align="left"&gt;&lt;a name="_Toc99980658"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 24pt; color: black; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;"&gt;3.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc99980658;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 7pt; color: black;" times="" new="" roman="" mso-font-kerning:="" 18="" 0pt=""&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980658;"&gt;&lt;b&gt;&lt;span style="font-size: 24pt; color: black; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;测试&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980658;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 24pt; color: black; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;"&gt;Protected &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980658;"&gt;&lt;b&gt;&lt;span style="font-size: 24pt; color: black; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;方法&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980658;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 24pt; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;Protected&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;方法只在派生类可见，因此测试类中不能直接看到。如测试&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;ClassLibrary1.MyObject&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;下面的方法：&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;protected&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;string&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; MyProtectedMethod(&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;string&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; strInput, &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;int&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; i32Value) &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;{&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;return&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;this&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;.Name + &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;": "&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; + strInput + &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;", "&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; + &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;i32Value.ToString();&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;}&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;a href="http://www.amazon.com/exec/obidos/ASIN/0974514020/002-0202185-0492070"&gt;&lt;span lang="CS" style="mso-ansi-language: CS;"&gt;Pragmatic Unit Testing in C# with NUnit&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ansi-language: CS;"&gt; &lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:="" mso-ansi-language:="" cs=""&gt;中提供了一个方法，从&lt;/span&gt;&lt;span lang="CS" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;MyObject&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:="" mso-ansi-language:="" cs=""&gt;派生一个类&lt;/span&gt;&lt;span lang="CS" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;MyObjectTester&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:="" mso-ansi-language:="" cs=""&gt;，然后建立一个公有方法&lt;/span&gt;&lt;span lang="CS" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;TestMyProtectedMethod&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:="" mso-ansi-language:="" cs=""&gt;，封装上面的&lt;/span&gt;&lt;span lang="CS" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ansi-language: CS;"&gt;protected&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:="" mso-ansi-language:="" cs=""&gt;方法，如下：&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;public&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;new&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;string&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; TestMyProtectedMethod(&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;string&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; strInput, &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;int&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; i32Value) &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;{&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;return&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;base&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;.MyProtectedMethod(strInput, &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;i32Value);&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;}&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:="" mso-ansi-language:="" cs=""&gt;该方法很简单，满足了上面的所有标准：&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;table  style="width: 100%; border-collapse: collapse; mso-border-alt: outset #111111 .75pt; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt;" cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;"&gt;&#xD;
&lt;td style="background: #ffffcc; width: 15.42%; mso-border-alt: inset #111111 .75pt; border: #111111 1pt inset; padding: 1.5pt;" width="15%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;标准&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #111111 1pt inset; background: #ffffcc; border-left: #ece9d8; width: 84.58%; border-bottom: #111111 1pt inset; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; padding: 1.5pt;" width="84%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;满足性&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="mso-yfti-irow: 1;"&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #111111 1pt inset; width: 15.42%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="15%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;透明性&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 84.58%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="84%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;使用继承将&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;MyObjectTester&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;类放到&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;UnitTests&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;程序集中，没有在产品代码中添加新的代码。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="mso-yfti-irow: 2;"&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #111111 1pt inset; width: 15.42%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="15%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;范围&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 84.58%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="84%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;与是否调试模式无关。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="mso-yfti-irow: 3; mso-yfti-lastrow: yes;"&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #111111 1pt inset; width: 15.42%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="15%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;简单性&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 84.58%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="84%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;虽然本方法需要一个继承的类，但符合&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;OO&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;思想。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p  style="margin: 17pt 0cm 16.5pt 21.25pt; text-align: left; mso-pagination: widow-orphan; mso-outline-level: 1;" align="left"&gt;&lt;a name="_Toc99980659"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 24pt; color: black; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;"&gt;4.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc99980659;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 7pt; color: black;" times="" new="" roman="" mso-font-kerning:="" 18="" 0pt=""&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980659;"&gt;&lt;b&gt;&lt;span style="font-size: 24pt; color: black; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;测试私有方法&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980659;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 24pt; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;测试私有方法稍微复杂些，但我们可以利用&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemreflection.asp"&gt;System.Reflection&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;。你可以利用反射动态的访问一个类型的方法，包括实例和静态的私有方法。要注意的是访问私有方法需要&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemsecuritypermissionsreflectionpermissionclasstopic.asp"&gt;ReflectionPermission&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;，但在开发机或&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;BUILD&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;机上运行单元测试不是问题。&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;假设我们要测试&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;ClassLibrary1.MyObject&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;类的&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;MyPrivateMethod&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;私有方法：&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;private&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;string&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; MyPrivateMethod(&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;string&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; strInput, DateTime dt, &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;double&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;dbl) &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;{&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;return&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;this&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;.Name + &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;": "&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; + strInput + &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;", "&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; + &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dt.ToString() + &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;", "&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; + dbl.ToString();&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;}&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:="" mso-ansi-language:="" cs=""&gt;一种解决方法是建立一个&lt;/span&gt;&lt;span lang="CS" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ansi-language: CS;"&gt;UnitTestUtilities &lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:="" mso-ansi-language:="" cs=""&gt;工程包含一个&lt;/span&gt;&lt;span lang="CS" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;UnitTestUtilities.Helper&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:="" mso-ansi-language:="" cs=""&gt;类，用于通过反射调用测试方法。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;public&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;static&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;object&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; RunStaticMethod(System.Type t, &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;string&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; strMethod, &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;object&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; [] aobjParams) &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;{&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;BindingFlags eFlags = &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;BindingFlags.Static | BindingFlags.Public | &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;BindingFlags.NonPublic;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;return&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; RunMethod(t, strMethod, &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;null&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;, aobjParams, eFlags);&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;} &lt;/span&gt;&lt;i&gt;&lt;span lang="CS" style="font-size: 9pt; color: green;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;//end of method&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;public&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;static&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;object&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; RunInstanceMethod(System.Type t, &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;string&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; strMethod, &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;object&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; objInstance, &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;object&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; [] aobjParams) &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;{&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;BindingFlags eFlags = BindingFlags.Instance | BindingFlags.Public | &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;BindingFlags.NonPublic;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;return&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; RunMethod(t, strMethod, &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;objInstance, aobjParams, eFlags);&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;} &lt;/span&gt;&lt;i&gt;&lt;span lang="CS" style="font-size: 9pt; color: green;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;//end of method&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;private&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;static&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;object&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; RunMethod(System.Type t, &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;string&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;strMethod, &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;object&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; objInstance, &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;object&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; [] aobjParams, BindingFlags eFlags) &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;{&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MethodInfo m;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;try&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;m = t.GetMethod(strMethod, eFlags);&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;if&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; (m == &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;null&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;)&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;throw&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;new&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; ArgumentException(&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;"There is no method '"&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; + &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;strMethod + &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;"' for type '"&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; + t.ToString() + &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;"'."&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;);&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;object&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; objRet = m.Invoke(objInstance, aobjParams);&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;return&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; objRet;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;catch&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;throw&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;} &lt;/span&gt;&lt;i&gt;&lt;span lang="CS" style="font-size: 9pt; color: green;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;//end of method&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;私有方法&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;RunMethod&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;利用反射时必须的参数，调用相关的被测试方法并返回值。这里有两个封装的方法&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;RunStaticMethod&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;和&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;RunInstanceMethod&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;，分别针对静太方法和实例方法。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;大概看一下这两个方法的代码，首先取得类型的&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;MethodInfo&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;，因为我们调用的是已经存在的方法，如果是空方法，则产生一个异常。一旦有了&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;MethodInfo&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;，我们就可以调用实例（如果是&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;static&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;，则为&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;null&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;）的私有方法，并传入参数数组。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;我们可以在&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;NUnit&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;中这样使用：&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;[Test] &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;public&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;void&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; TestPrivateInstanceMethod()&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;{&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;string&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; strExpected = &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;"MyName: Hello, &lt;chsdate w:st="on" isrocdate="False" islunardate="False" day="24" month="5" year="2004"&gt;5/24/2004&lt;/chsdate&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;12:00:00 AM, 2.1"&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ClassLibrary1.MyObject objInstance &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;= &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;new&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; MyObject(&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;"MyName"&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;);&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;object&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; obj = &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;UnitTestUtilities.Helper.&lt;b&gt;RunInstanceMethod&lt;/b&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;typeof&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;(ClassLibrary1.MyObject), &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;"MyPrivateMethod"&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;objInstance, &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;new&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;object&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;[&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: midnightblue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;3&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;] {&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: purple;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;"Hello"&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;, &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;new&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; DateTime(&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: midnightblue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;2004&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;,&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: midnightblue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;05&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;,&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: midnightblue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;24&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;), &lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: midnightblue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;2.1&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;});&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: blue;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;string&lt;/span&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt; strActual = Convert.ToString(obj);&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Assert.AreEqual(strExpected,strActual);&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="background: #fbedbb; margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;" align="left"&gt;&lt;span lang="CS" style="font-size: 9pt; color: black;" mso-font-kerning:="" courier="" new="" 0pt="" mso-ansi-language:="" cs=""&gt;}&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;table  style="width: 100%; border-collapse: collapse; mso-border-alt: outset #111111 .75pt; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt;" cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;"&gt;&#xD;
&lt;td style="background: #ffffcc; width: 15.42%; mso-border-alt: inset #111111 .75pt; border: #111111 1pt inset; padding: 1.5pt;" width="15%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;标准&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #111111 1pt inset; background: #ffffcc; border-left: #ece9d8; width: 84.58%; border-bottom: #111111 1pt inset; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; padding: 1.5pt;" width="84%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;满足性&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="mso-yfti-irow: 1;"&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #111111 1pt inset; width: 15.42%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="15%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;透明性&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 84.58%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="84%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;唯一的额外代码&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;- &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;UnitTestUtilities&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;,&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;不会包含在产品中一起发布。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="mso-yfti-irow: 2;"&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #111111 1pt inset; width: 15.42%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="15%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;范围&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 84.58%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="84%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;该方法中没有任何东西是仅依赖于调试模式。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="mso-yfti-irow: 3; mso-yfti-lastrow: yes;"&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #111111 1pt inset; width: 15.42%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="15%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;简单性&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td style="border-right: #111111 1pt inset; border-top: #ece9d8; border-left: #ece9d8; width: 84.58%; border-bottom: #111111 1pt inset; background-color: transparent; mso-border-alt: inset #111111 .75pt; mso-border-left-alt: inset #111111 .75pt; mso-border-top-alt: inset #111111 .75pt; padding: 1.5pt;" valign="top" width="84%"&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;该方法可以在一个单独调用中调用任何方法。利用&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;UnitTestUtilities&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;的唯一问题就是为&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;RunInstanceMethod&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;或&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; color: #990000;" mso-font-kerning:="" courier="" new="" 0pt=""&gt;RunStaticMethod&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;创建正确的参数（方法名、数据类型等）。因为方法是动态调用的，参数在编译时不会被检查。&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 17pt 0cm 16.5pt 21.25pt; text-align: left; mso-pagination: widow-orphan; mso-outline-level: 1;" align="left"&gt;&lt;a name="_Toc99980660"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 24pt; color: black; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;"&gt;5.&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style="mso-bookmark: _Toc99980660;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 7pt; color: black;" times="" new="" roman="" mso-font-kerning:="" 18="" 0pt=""&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980660;"&gt;&lt;b&gt;&lt;span style="font-size: 24pt; color: black; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;结论&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="mso-bookmark: _Toc99980660;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 24pt; font-family: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;虽然对私有方法的测试存在争论，至少我们现在知道如何进行测试了。我们可以通过包装基类建立一个派生类&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;TesterClass&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;用于测试其&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;protected&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;方法，通过&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;UnitTestUtility&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" times="" new="" roman="" mso-hansi-font-family:=""&gt;帮助类利用反射可以测试类中的私有方法。所有这些技术都可利于提高测试覆盖率。&lt;/span&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&lt;span style="font-size: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan;" align="left"&gt;&lt;span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;参考&lt;span lang="EN-US"&gt;: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/csharp/TestNonPublicMembers.asp"&gt;http://www.codeproject.com/csharp/TestNonPublicMembers.asp&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/span&gt;FROM:&amp;nbsp; &lt;a href="http://jane3s.bokee.com/6967889.html"&gt;http://jane3s.bokee.com/6967889.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;"&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/span&gt;Other: &lt;a href="http://jane3s.bokee.com/catalog_140822.html"&gt;http://jane3s.bokee.com/catalog_140822.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/s021368/aggbug/2177571.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/s021368/articles/2177571.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/s021368/articles/2174743.html</id><title type="text">(转) SQL替换多个特殊字符</title><summary type="text">CREATE TABLE ErrorMessage ( NA VARCHAR(20))INSERT INTO ErrorMessage VALUES(&amp;#39;&amp;#39;)INSERT INTO ErrorMessage VALUES(&amp;#39;★&amp;#39;)INSERT INTO ErrorMessage VALUES(&amp;#39;△&amp;#39;)GO CREATE TABLE Erro ( NA1 VARCHAR(20))INSERT INTO Erro VALUES(&amp;#39;实打实的大★厦&amp;#39;)INSERT INTO Erro VALUES(&amp;#39;实打大★厦&amp;#39;)GO</summary><published>2011-09-13T07:03:00Z</published><updated>2011-09-13T07:03:00Z</updated><author><name>阿龍</name><uri>http://www.cnblogs.com/s021368/</uri></author><link rel="alternate" href="http://www.cnblogs.com/s021368/articles/2174743.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/s021368/articles/2174743.html"/><content type="html">&lt;p&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt; ErrorMessage ( NA &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; ErrorMessage &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; ErrorMessage &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;★&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; ErrorMessage &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;△&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp; Erro&amp;nbsp; ( NA1 &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; Erro &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;实打实的大★厦&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; Erro &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;实打大★厦&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@REPLACECMD&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;2000&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;NA1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@REPLACECMD&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;REPLACE(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@REPLACECMD&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'''&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt;NA&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'''&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; ,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''''&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;)&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp; ErrorMessage &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;print&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@REPLACECMD&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@SQLCMD&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;4000&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@SQLCMD&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;select &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #008000;"&gt;@REPLACECMD&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;AS NECOL FROM Erro&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SQLCMD&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;NECOL&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;实打实的大厦&lt;br /&gt;实打大厦&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;FROM:http://topic.csdn.net/u/20100928/13/0b89a46c-4927-4986-8f27-99b4d8d8ecea.html&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/s021368/aggbug/2174743.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/s021368/articles/2174743.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
