没有单元测试,何谈重构(3)

发表于:2017-03-31来源:jianshu作者:溪石iOS点击数: 标签:重构
准备测试工具 这里选用的是XCTest,它是Xcode8中内置的测试框架,使用起来非常简单,分以下两种情况为项目添加测试: 1. 新建工程时添加单元测试 : 新

 

准备测试工具

这里选用的是XCTest,它是Xcode8中内置的测试框架,使用起来非常简单,分以下两种情况为项目添加测试:

1. 新建工程时添加单元测试

新建时添加单元测试

2.为已有工程添加单元测试

Xcode8中添加的步骤与前几代有所不同:

添加Target

用关键词test快速找到Unit Testing bundle

添加好单元测试后的工程结构

添加第一个测试

第一个测试是很重要的,它决定了我们后面测试的思路和方向,这里以需要什么测什么为指导原则,从结果出发,所以先来看下基本的点播需求

工作日点播一部普通影片,收费2元,积一分。

根据以上需求描述,我们在RefactorDemoTests.m添加测试方法

 

- (void)testStatement_Regular {
    Movie *matrixMovie1 = [[Movie alloc] initWithTitle:@"黑客帝国1"
                                             priceCode:MovieEnumRegular];
    Demand *aDemand1 = [[Demand alloc] initWithMovie:matrixMovie1
                                          timePeriod:TimePeriodEnumWorkDaytime];

// 顾客租赁一部:
Customer *aCustomer = [[Customer alloc] initCustomerWithName:@"溪石"];
[aCustomer addDemand:aDemand1];

XCTAssertTrue([@"溪石的点播清单\\\\n"
@"\\\\t黑客帝国1\\\\t2 元\\\\n"
@"费用总计 2 元\\\\n"
@"获得积分 1"
isEqualToString:[aCustomer statement]],
@"测试点播一部普通电影");

}

 

这个测试用例中,顾客“溪石”点播了一部老片《黑客帝国1》,由于是工作日,因此按原价收取,并积1分,详细细节看Cutomer类源码中的方法statement()。 按快捷键?U,运行测试,发现测试报错了:

原文转自:http://www.jianshu.com/p/0b4fd636ad2c