WF单元测试系列2:简单测试Activity的行为

发表于:2009-3-16 14:18

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

 作者:zhaojunqi    来源:cnblogs

  在上一篇文章里,我介绍了如何对一个简单的Activity进行单元测试。(参见上一篇>>)我们为Activity提供了两个参数LastName和FirstName,Activity会根据这两个参数生成一个Email地址。在上一篇中,我们输入了两个“合法”的参数,测试被通过了。

  但我们写单元测试,如果只测试正确的输入的话,那单元测试也就没有意义了。所以我们这次测试一下,输入非法参数时,如何对Activity进行测试。

  继续使用上一篇中的工程。(点击查看上一篇:WF单元测试系列1:测试基本的Activity

  在上次创建的测试类中添加一个测试方法ThrowExceptionOnNullFirstName:

[TestMethod]
public void ThrowExceptionOnNullFirstName()
{
    GetEmailAddress_Accessor activity = new GetEmailAddress_Accessor();
    activity.FirstName = null;
    activity.LastName = Mother.LAST_NAME;

    activity.Execute_Accessor(null);
}

  在这个测试方法里,我传递给Activity一个非法的参数FirstName为Null。运行测试,这时这个 测试方法会失败。因为GetEmailAddress的Execute()方法里的如下语句

EmailAddressCreator.GetInstance().CreateEmailAddress(FirstName, LastName);

  会抛出一个System.ArgumentNullException的异常。

  我们可以改写一下Execute()方法,检查一下参数,如果参数非法的话,抛出一个异常(这个异常可以是我们自定义的,这里我抛出同一个异常类型):

protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
    if (this.LastName == null || this.FirstName == null)
        throw new ArgumentNullException();

    Email = EmailAddressCreator.GetInstance().CreateEmailAddress(FirstName, LastName);
    return ActivityExecutionStatus.Closed;
}

  再运行单元测试,依旧失败。

  对于这条“错误”路径,单元测试应该通过,而不是失败。所以对单元测试小做修改。

  在测试方法上加一个Attribute:[ExpectedException(typeof(ArgumentNullException))]

  通知单元测试,我们在这里期待一个异常的出现。

  再次运行单元测试,通过!

  附源码:NewEmployeeWF2.rar(右键另存为)

  前一篇是对被测试Activity的“状态”进行测试,而这一篇是对Activity的“行为”进行简单的测试。后面我们会讲到如何利用Mock Framrwork进行更复杂的状态测试和行为测试。

相关阅读:

WF单元测试系列1:测试基本的Activity

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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号