刚刚开通博客,借此机会谈谈在本公司项目单元测试中用到的Fakes测试框架,和其他测试框架不同,Fakes大大提高了单元测试的性能,我们不需要关心数据库的数据变化,接口调用导致的变化,文件、及其它资源的访问等问题。使用伪造处理方法可以只关心我们需要测试的那部分逻辑。
Fakes使用起来也比较方便,在Visual Studio 2012中已经内置了该框架,可以提供成员模拟的方法,以方便进行单元测试。
下面就具体说说该如何使用,写了一个简单的例子,(本打算直接把公司项目中代码展示出来,但Boss说那是不允许的,哈哈,所以大家见谅!有问题可以单独联系我)
假设我们在项目中GreatWall有以下几个类
//接口 public interface IT { int AddText(int a, int b); } public class T,IT { public int AddText(int a, int b) { return a + b; } } public class MyClass { public static int GetAddText(IFwProductRepository obj) { int a=2; int b=5; return obj.AddText(a,b); } }
我们要使用Fakes进行测试只需要在测试项目中引用 GreatWall,并且在之上右键->建立 Fakes程序集即可使用Fakes,在测试方法中使用就可以了,
[TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { IT t = new StubITy() { AddTextInt32Int32=(x,y)=> { return x+y; } }; Assert.AreEqual(7, MyClass.GetAddText(t)); } }
就这么简单,根本不需要与数据库打交道。