快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰集团官网:Visual Studio 2012单元测试使用介绍



本人之前很少应用单元测试,总感觉日常平凡的事情写得代码够多了,单元测试还要再编码,增添大年夜量事情量,信托不少法度榜样猿也是这么觉得吧。

然则我觉得,在需要的时刻精确运用单元测试,可以大年夜大年夜缩短代码的调试光阴,正所谓磨刀不误砍柴工,在此建议仍不会单元测试的,照样学一下吧。当然本人在单元测试方面照样菜鸟,无论是鸡蛋鲜花都迎接。

近来公司请微软的人做了一些关于应用VS2012进行单元测试的小培训,小生微做条记,结合朦胧的影象,在此自行总结,并分享之。废话少说,先上条记:

1.先写单元测试(依我愚见,应该是接口先行,假如有的话) -> 测试掉败 -> 以最小的篡改(即编写实际代码)使测试经由过程(而在VS2012中已经不能经由过程现有项目直接天生测试项目了,我感觉这个功能照样应该保留,微软老是这副德性,逼迫用户适应他们的产品,然则又不得不适应);

2.不因单元测试而追加功能(代码),即逻辑不受单元测试影响;

3.改变了代码的逻辑(增编削),应及时运行单元测试;

4.在测试措施声明Attribute —— TestCategory("分类或特性名");

5.在单元测试项目添加Fakes法度榜样集分离外部依附(如数据库造访,获取设置设置设备摆设摆设信息等);

6.初始化单元测试类中的成员等信息,可添加措施并声明Attribute[TestInitialize](措施需为public);

7.测试自动化。

以下我将经由过程自己编写代码来验证上述条记中的部分要点。有些未涉及,今后再考试测验了。

1.新建一个单元测试项目,并添加类XmlSerializationTest,代码如下:

[TestClass]

public class XmlSerializationTest{

[TestMethod]public void TestWriteXml()

{UserInfo user = new UserInfo();

XmlSerialization serialization = new XmlSerialization();bool flag = serialization.WriteXml(user);

Assert.IsTrue(flag);}

}

因为我这个项目是对Xml序列化进行测试,因而条件是项目中已存在了一个UserModel类,并且在单元测试项目中添加响应引用

public class UserModel

{public string LoginName { get; set; }

public string Password { get澳门新葡亰集团官网; set; }}

接下来在编写实际的代码,微软讲师建议我们先在测试项目编写,待经由过程单元测试后再将代码移到响应的项眼前目今面。

public class XmlSerialization

{public bool WriteXml(T model)

{throw new NotImplementedException();

}}

现在全部办理规划布局如下图所示

包管全部办理规划天生成功之后点击菜单“测试” -〉 “运行” -〉 “所有测试”,发明测试不经由过程,于是就按照第一点条记,以最小篡改使测试经由过程。

改动WriteXml措施为:

public bool WriteXml(T model)

{return true;

}

运行测试经由过程。对付返回值为bool的措施,小我建议进行至少两次Assert,也便是分手对返回true和false进行Assert,因而我们再对WriteXml措施添加一个测试措施,

[TestMethod]

public void TestWriteXmlFalse(){

Assert.IsFalse(new XmlSerialization().WriteXml(null));}

运行测试,不经由过程,以是我得要好好改我的代码了,在篡改傍边坚持履行我的第三点条记,篡改代码及时运行单元测试。

public class XmlSerialization

{private string filePath;

public XmlSerialization(string filePath){

this.filePath = filePath;}

public bool WriteXml(T model, string filePath = null) where T : class

{bool result = false;

if (model == null){

return result;}

if (string.IsNullOrEmpty(filePath))

{filePath = this.filePath;

}

XmlSerializer serial澳门新葡亰集团官网izer = new XmlSerializer(typeof(T));using澳门新葡亰集团官网 (TextWriter tr = new StreamWriter(filePath))

{serializer.Serialize(tr, model);

tr.Close();result = true;

}

return result;}

public T ReadXml(string filePath = null) where T : class

{T model = null;

if (string.I澳门新葡亰集团官网sNullOrEmpty(filePath)){

filePath = this.filePath;}

XmlSerializer serializer = new XmlSerializer(typeof(T));

TextReader tr = null;try

{tr = new StreamReader(filePath);

model = (T)serializer.Deserialize(tr);}

catch { }finally

{if (tr != null)

{tr.Close();

tr.Dispose();}

}

return model;}

}

我们发明这个类的构造函数多了一个参数,是工具序列化后保存的路径,且该类对应的测试类都必要用到,因而我盼望在每次测试进行单元测试前先将工具的构建,这便是第六点条记供给的“声明Attribute[TestI澳门新葡亰集团官网nitialize]”(留意必须是public措施,我用private措施运行测试是不经由过程)。改造后的测试类如下:

[TestClass]

public class XmlSerializationTest{

private XmlSerialization serialization;[TestInitialize]

public void InitTest(){

this.serialization = new XmlSerialization(@"F:\usermodel.seri");}

[TestMethod]

public void TestWriteXml(){

UserModel user = new UserModel();bool flag = serialization.WriteXml(user);

Assert.IsTrue(flag);Assert.IsFalse(serialization.WriteXml(null));

}

[TestMethod]public void TestReadXml()

{UserModel user = new UserModel();

user.LoginName = "aa";serialization.WriteXml(user);

UserModel model = serialization.ReadXml();Assert.IsNotNull(model);

Assert.AreEqual(user.LoginName, model.LoginName);

//路径不存在,应返回nullUserModel modelnull = serialization.ReadXml(@"F:\notexists.seri");

Assert.IsNull(modelnull);}

}

还可以阐发测试代码的覆盖率,如下图所示在测试资本治理器点击“运行”下的响应选项。

居然是100%,真不知道这个器械微软是怎么阐发出来的。

把类XmlSerializationTest移到响应的项目,变动命名空间,在测试项目添加响应引用,测试经由过程。

将办理规划添加到TFS源码治理,我这边是用的是微软云TFS免费版。

收工。

VS供给了很多类型的测试,负载、UI等等测试,感到照样蛮强大年夜的。

您可能还会对下面的文章感兴趣: