编写综合的单元测试

发表于:2012-7-03 10:55

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:李琼 译    来源:51Testing软件测试网采编

分享:

  每个用例编写一到二个断言是单元测试最佳实践的常见内容.那些这么认为的是极少和只展示一个单元测试的人。因此如果你采纳他们的建议,为一个很小的运算你都需要大量的单元测试去保证质量。这篇文章意图通过例子展示,一个测试用例多个断言是有必要和有价值的。

  Person这个对象在数据绑定场景中经常出现,我们来看下。

  测试FirstName

  第一个来测试FirstName这个属性的设置,开始如下:

[TestMethod]
public voidPerson_FirstName_Set()
{
      varperson =newPerson("Adam","Smith");
      person.FirstName ="Bob";
      Assert.AreEqual("Bob", person.FirstName);
}

  接下来我们来测试FirstName的改变通知。

[TestMethod]
public voidPerson_FirstName_Set_PropertyChanged()
{
      varperson =newPerson("Adam","Smith");
      vareventAssert =newGranite.Testing.PropertyChangedEventAssert(person);
      person.FirstName ="Bob";
      eventAssert.Expect("FirstName");
}

  当我们执行这个测试时,会得到一个失败提示信息“期望的属性名‘FirstName’,但接收到的是’IsChanged’”。显然,设置FirstName的属性触发了“IsChanged”标记,我们需要把它考虑在内。因此我们把它加入:

[TestMethod]
public voidPerson_FirstName_Set_PropertyChanged()
{
      varperson =newPerson("Adam","Smith");
      vareventAssert =newGranite.Testing.PropertyChangedEventAssert(person);
      person.FirstName ="Bob";
      eventAssert.SkipEvent();//this was IsChanged
      eventAssert.Expect("FirstName");
}

  鉴于以上两个测试,我们考虑当FirstName被修改时还有其他什么属性会改变。查看API,IsChanged和FullName属性会变化。

  [TestMethod]

public voidPerson_FullName_Changed_By_Setting_FirstName()
{
      varperson =newPerson("Adam","Smith");
      person.FirstName ="Bob";
      Assert.AreEqual("Bob Smith", person.FullName);
}

[TestMethod]
public voidPerson_IsChanged_Changed_By_Setting_FirstName() {       varperson =newPerson("Adam","Smith");
      person.FirstName ="Bob";
      Assert.IsTrue(person.IsChanged);
}

51/512345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号