北京招聘网站排行,重庆短视频制作公司,中企动力总部在哪里,浙江省住房和城乡建设厅官方网站我们在开发#xff0c;有时遇到一些Legcy代码#xff0c;然后需要对它们进行UnitTest。UnitTest的重要性在这里不再说了。但是发现某些Class中有些方法是Static的#xff0c;按以往的方法我们需要用Extact Interface 方法 从那个需要测试的Class#xff0c;然后使用 IOC /D… 我们在开发有时遇到一些Legcy代码然后需要对它们进行UnitTest。UnitTest的重要性在这里不再说了。但是发现某些Class中有些方法是Static的按以往的方法我们需要用Extact Interface 方法 从那个需要测试的Class然后使用 IOC /DI 的方式替换具体的实现用一个Fake Class或Mock 一个实现来完成 UnitTest。现在我们可以使用Moles 对静态方法做UnitTest。看下面的示例 假设有这个样的Class: 1: public class SomeClass 2: { 3: private int AddTenItem(int num) 4: { 5: return num 10; 6: } 7: 8: private static int AddTwentyItem(int num) 9: { 10: return num 20; 11: } 12: 13: public static string GetMessage(string msg) 14: { 15: return string.Format(--{0}--, msg); 16: } 17: 18: public string GetTotalItem(int num) 19: { 20: return string.Format({0}, AddTenItem(num) AddTwentyItem(num)) ; 21: } 22: } 从上面方法我们看到一个GetMessage静态方法下面看用UnitTest如何测试它。你需要先下载安装Moles从官方网站然后在VS2010中通过Project的 Reference右键菜单 在需要Mock Assembly选择”Add Moles Assembly” 它会自动生成一个 “SomeNameAssembly.Moles”程序集。编写下面的单元测试Code: 1: [TestMethod] 2: [HostType(Moles)] 3: public void TestGetMessageWithMoles() 4: { 5: //arrange 6: MSomeClass.GetMessageString (str) str --; 7: 8: //act 9: var result SomeClass.GetMessage(test); 10: 11: //assert 12: Assert.AreEqual(test--, result); 13: } 需要增加一个Attribtue [HostType(“Moles”)] 对于MsTestMSomeClass是Moles生成的并自动引用于Project上了如上面代码你可以看到我们可以Mock 这个方法的实现了。 对于private的方法也可以看下面的代码: 1: [TestMethod] 2: [HostType(Moles)] 3: public void TestPrivateMethodWithMoles() 4: { 5: //arrange 6: MSomeClass.AddTwentyItemInt32 (i) i 2; 7: MSomeClass.AllInstances.AddTenItemInt32 (SomeClass, i) i 1; 8: 9: //act 10: string result new SomeClass().GetTotalItem(1); 11: 12: //assert 13: Assert.AreEqual(5, result); 14: } 就这么简单上面的代码我们指定两个Private方法delegate一个是Static method另一个是Instance method这里标记是AllInstances。 然后Call那个Public的方法最后Assert。它们无缝地你的真正方法整合在一起做UnitTest。 希望对您的开发有帮助。 作者Petter Liu 出处http://www.cnblogs.com/wintersun/ 本文版权归作者和博客园共有欢迎转载但未经作者同意必须保留此段声明且在文章页面明显位置给出原文连接否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。 转载于:https://www.cnblogs.com/wintersun/archive/2011/08/09/2132340.html