复制代码
  public class XmlSerialization
  {
  private string filePath;
  public XmlSerialization(string filePath)
  {
  this.filePath=filePath;
  }
  public bool WriteXml<T>(T model,string filePath=null)where T:class
  {
  bool result=false;
  if(model==null)
  {
  return result;
  }
  if(string.IsNullOrEmpty(filePath))
  {
  filePath=this.filePath;
  }
  XmlSerializer serializer=new XmlSerializer(typeof(T));
  using(TextWriter tr=new StreamWriter(filePath))
  {
  serializer.Serialize(tr,model);
  tr.Close();
  result=true;
  }
  return result;
  }
  public T ReadXml<T>(string filePath=null)where T:class
  {
  T model=null;
  if(string.IsNullOrEmpty(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[TestInitialize]”(注意必须是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<UserModel>(user);
  Assert.IsTrue(flag);
  Assert.IsFalse(serialization.WriteXml<UserModel>(null));
  }
  [TestMethod]
  public void TestReadXml()
  {
  UserModel user=new UserModel();
  user.LoginName="aa";
  serialization.WriteXml<UserModel>(user);
  UserModel model=serialization.ReadXml<UserModel>();
  Assert.IsNotNull(model);
  Assert.AreEqual(user.LoginName,model.LoginName);
  //路径不存在,应返回null
  UserModel modelnull=serialization.ReadXml<UserModel>(@"F: otexists.seri");
  Assert.IsNull(modelnull);
  }
  }
  复制代码
  还可以分析测试代码的覆盖率,如下图所示在测试资源管理器点击“运行”下的相应选项。

  居然是,真不知道这个东西微软是怎么分析出来的。

  把类XmlSerializationTest移到相应的项目,更改命名空间,在测试项目添加相应引用,测试通过。
  将解决方案添加到TFS源码管理,我这边是用的是微软云TFS免费版。
  收工。
  VS提供了很多类型的测试,负载、UI等等测试,感觉还是蛮强大的。