iOSDataFactory 0.3.0

iOSDataFactory 0.3.0

CodeIT 维护。



  • CodeIT

iOS Data Factory

iOSDataFactory 是一个基于 Andy Gibson 创建的项目 DataFactory 的项目。它允许您轻松生成测试数据:姓名、地址、电子邮件地址、电话号码、文本和日期的值。

安装

iOSDataFactory 可以作为 CocoaPod 安装,并以 Swift 框架的形式构建。要安装,请在您的 Podfile 中包含以下内容。

use_frameworks!

pod 'iOSDataFactory'

生成测试数据

Swift 实现的主要功能是单例。要生成随机数据,只需调用类名、共享属性和方法。

DataFactory.shared.getRandomWord()

iOSDataFactory 类可以生成不同类型的值,从地址到随机文本到随机日期,再到固定时间范围内的日期。

数字

有三种不同的选项来获取随机数:

  • 从 0 到最大整数
DataFactory.shared.getNumber() -> <Int>
  • 从 0 到自定义上限
DataFactory.shared.getNumber(upTo: <Int>) -> <Int>
  • 从左到右的自定义界限
DataFactory.shared.getNumber(between: <Int>, and: <Int>) -> <Int>

字符

有三个选项从 az 生成随机字符(或字符序列)。

  • 单个字符
DataFactory.shared.getRandomChar() -> <Character>
  • 从1到 length 的字符串
DataFactory.shared.getRandomChars(length: <Int>) -> <String?>
  • minLengthmaxLength 的字符串
DataFactory.shared.getRandomChars(from minLength: <Int>, to maxLength: <Int>) -> <String?>

单词

有三个选项从 contentDataValues 获取随机单词。

  • 从0到13
DataFactory.shared.getRandomWord() -> <String>
  • 从2到 length
DataFactory.shared.getRandomWord(length: <Int>) -> <String?>
  • minLengthmaxLength
DataFactory.shared.getRandomWord(from minLength: <Int>, to maxLength: <Int>) -> <String?>

文本

有三个选项从 DefaultContentDataValues 获取随机文本。

  • 从0到 digits
DataFactory.shared.getNumberText(_ digits: Int) -> <String>
  • 从2到 length
DataFactory.shared.getRandomText(length: Int) -> <String?>
  • minLengthmaxLength
DataFactory.shared.getRandomText(from minLength: Int, to maxLength: Int) -> <String?>

名字

有三个选项从 DefaultNameDataValues 获取随机名字。

DataFactory.shared.getFirstName() -> <String>
DataFactory.shared.getLastName() -> <String>
  • 全名
DataFactory.shared.getFullName() -> <String>

地址

有几个选项从 DefaultAddressDataValues 获取随机地址。

  • 街道名称
DataFactory.shared.getStreetName() -> <String>
  • 街道后缀
DataFactory.shared.getStreetSuffix() -> <String>
  • 城市名称
DataFactory.shared.getCity() -> <String>
  • 地址
DataFactory.shared.getAddress() -> <String>
  • 第二行地址,这取决于 probability
DataFactory.shared.getSecondAddressLine(_ probability: Int = 100, _ defaultValue: String? = nil) -> <String?>
  • 电子邮件地址
DataFactory.shared.getEmailAddress() -> String
  • 公司名称
DataFactory.shared.getBusinessName() -> String

日期

有三种不同的方法可以获取随机日期

  • 返回从 19551985 的随机日期
DataFactory.shared.getBirthDate() -> Date
  • 返回当前日期的 minDatemaxDate 之间的随机日期
DataFactory.shared.getDate(between minDate: Date, and maxDate: Date)
  • 返回位于 baseDateminDaysmaxDays 之间的随机日期
DataFactory.shared.getDate(at baseDate: Date, from minDays: Int, to maxDays: Int) -> Date

示例

IOSDataFactory 类可以生成不同类型的值,从地址到随机文本到随机日期,再到固定时间段内的日期。可以使用以下代码创建地址和公司名称

for _ in 1...10 {
    let address = DataFactory.shared.getAddress() + ", " + DataFactory.shared.getCity() + ", " + DataFactory.shared.getNumberText(5)
    let business = DataFactory.shared.getBusinessName()
    print(business + " located at " + address)
}

产生的输出是

Dacula Insurance located at 726 Sandra Park, Monroe, 70567
Blackshear Insurance located at 603 Granger Run, Nankin, 93250
Bogart Office supplies located at 674 Stalling Ave, Surrency, 87090
Uvalda Manufacturing located at 1793 Palmeraway Drv, Stillmore, 94901
Inaha Engineering located at 933 Grove Court, Mcintyre, 91245
College Park Software located at 1779 Chandlersville Path, Doerun, 56435
Lawrenceville Bakery located at 1328 Bowman Run, Temple, 49766
Osterfield Accounting located at 484 Alameda Path, South Newport, 64096
Doerun Insurance located at 1798 Larzelere Boulevard, Tarver, 87907
Hinesville Realty located at 753 Flintridge Rd, Cartersville, 17976

创建日期有许多功能,首先是创建一个随机日期,通常在一个合理的日期范围内。

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
var dateComponents = DateComponents()
dateComponents.year = 1980
dateComponents.month = 7
dateComponents.day = 11

let optionalMinDate = Calendar.current.date(from: dateComponents)
let maxDate = Date()

guard let minDate = optionalMinDate else { return }

for _ in 1...10 {
    let startDate = DataFactory.shared.getDate(between: minDate, and: maxDate)
    print("Date = \(dateFormatter.string(from: startDate))")
}

结果是选定范围的选择日期列表

Date = Dec 26, 2005
Date = Feb 1, 2015
Date = Jun 16, 1996
Date = Mar 13, 1998
Date = Sep 2, 1983
Date = Jun 16, 1998
Date = Jul 26, 1988
Date = Jun 11, 1991
Date = May 17, 1991
Date = Oct 18, 2011

通常,随机日期可能受到其他日期的限制,例如,结束日期不能早于开始日期。在这种情况下,要将开始日期作为最小日期值

for _ in 1...10 {
    let startDate = DataFactory.shared.getDate(between: minDate, and: maxDate)
    let endDate = DataFactory.shared.getDate(between: startDate, and: maxDate)
    print("Date range = \(dateFormatter.string(from: startDate)) to \(dateFormatter.string(from: endDate))")
}

结果是日期列表,其中第二个日期总是晚于第一个日期

Date range = Sep 27, 1981 to Apr 14, 2001
Date range = Jan 10, 1991 to Jun 24, 2001
Date range = Oct 7, 2008 to Jul 15, 2013
Date range = Jun 2, 2004 to Dec 9, 2007
Date range = Jan 29, 1987 to Jul 8, 1989
Date range = Nov 20, 1992 to Nov 27, 2006
Date range = Dec 24, 2015 to Jun 1, 2018
Date range = Oct 24, 2003 to Apr 27, 2008
Date range = Oct 19, 2002 to Jun 18, 2014
Date range = Mar 21, 1994 to Feb 10, 2009

在很多情况下,您可能希望结束日期仅比起始日期早几天。例如,帮助台支持票据或酒店住宿不会持续几年。为此,您可以指定从基准日期生成的结果的日期天数。在这种情况下,我们将结束日期设置在起始日期后10天内

for _ in 1...10 {
    let startDate = DataFactory.shared.getDate(between: minDate, and: maxDate)
    let endDate = DataFactory.shared.getDate(at: startDate, from: 0, to: 10)
    print("Date range = \(dateFormatter.string(from: startDate)) to \(dateFormatter.string(from: endDate))")
}

结果如下

Date range = Aug 7, 2010 to Aug 12, 2010
Date range = Mar 30, 1992 to Mar 31, 1992
Date range = Jan 7, 1995 to Jan 15, 1995
Date range = Apr 25, 1989 to Apr 29, 1989
Date range = Aug 14, 2000 to Aug 22, 2000
Date range = Dec 10, 1988 to Dec 12, 1988
Date range = Oct 17, 2004 to Oct 17, 2004
Date range = Oct 8, 1982 to Oct 10, 1982
Date range = Feb 7, 2004 to Feb 9, 2004
Date range = May 5, 1995 to May 7, 1995

您也可以指定负的最小天数值,它可能返回早于基准日期的日期,或者指定正的最小日期值以获取较晚的日期。以下是一个更复杂的示例,它使用不同的日期规则产生一些复杂测试数据。

for _ in 1...10 {
    // Generate an order date
    let orderDate = DataFactory.shared.getDate(between: minDate, and: maxDate)
    // Estimate delivery 4-10 days after ordering
    let estimatedDeliveryDate = DataFactory.shared.getDate(at: orderDate, from: 4, to: 10)
    // Deliver between 2 days prior and 3 days after delivery estimate
    let actualDeliveryDate = DataFactory.shared.getDate(at: estimatedDeliveryDate, from: -2, to: 3)
    var message = "Ordered on \(dateFormatter.string(from: orderDate)) deliver by = \(dateFormatter.string(from: estimatedDeliveryDate)) delivered on \(dateFormatter.string(from: actualDeliveryDate))"
    if estimatedDeliveryDate < actualDeliveryDate {
        message += " - LATE"
    } else if estimatedDeliveryDate > actualDeliveryDate {
        message += " - EARLY"
    }
    print(message)
}

在这里,我们计算订单日期,创建一个至少4天但不超过10天的送货日期,然后创建一个实际的送货日期,这个日期是在期望送货日期前2天和后3天之间。注意我们挑选的日期,预计的送货日期至少比订单日期晚4天,实际的送货日期最多只会比预计的日期早2天。这意味着实际的送货日期总是至少比订单日期晚2天,我们不会得到一个早于物品订货的送货日期值。此代码产生以下值

Ordered on Jan 9, 1995 deliver by = Jan 15, 1995 delivered on Jan 16, 1995 - LATE
Ordered on Oct 4, 2009 deliver by = Oct 13, 2009 delivered on Oct 13, 2009
Ordered on Nov 21, 1994 deliver by = Nov 26, 1994 delivered on Nov 28, 1994 - LATE
Ordered on Sep 24, 2016 deliver by = Sep 28, 2016 delivered on Sep 27, 2016 - EARLY
Ordered on Nov 23, 1986 deliver by = Nov 30, 1986 delivered on Dec 1, 1986 - LATE
Ordered on May 25, 2006 deliver by = May 30, 2006 delivered on Jun 1, 2006 - LATE
Ordered on Sep 26, 2002 deliver by = Oct 1, 2002 delivered on Oct 2, 2002 - LATE
Ordered on Mar 26, 2012 deliver by = Mar 31, 2012 delivered on Mar 31, 2012
Ordered on Apr 27, 1997 deliver by = May 2, 1997 delivered on May 2, 1997
Ordered on May 11, 1997 deliver by = May 17, 1997 delivered on May 16, 1997 - EARLY

文本数据

随机文本数据有两种形式,绝对随机数据和由单词组成的文本数据。您可以使用以下方法之一生成:

print(DataFactory.shared.getRandomText(from: 20, to: 25)!)
print(DataFactory.shared.getRandomChars(length: 20)!)
print(DataFactory.shared.getRandomWord(from: 4, to: 10)!)

这将产生:

monster island rescue
huqttachmujxhlhbfwrr
waited

这三种方法都可以传递一个单个长度,它返回一个固定长度的字符串,或者传递一个最小/最大长度,生成一个长度在最小/最大之间的随机字符串。对于单个单词方法,如果没有合适长度的单词在字典中,则使用随机字符生成单词。

更改生成的测试数据值 生成值的所使用的数据来自可以替换其他版本的类。例如,可以通过创建DefaultNameDataValues实例并调用DataFactory的setter来更改后缀值。注意,您只覆盖传递给初始化器的值。以下是将自定义学术后缀实现到DefaultNameDataValues中的简单代码。

let academicSuffixes = ["Ph.D.", "Ed.D.", "D.Phil.", "D.B.A.", "LL.D", "Eng.D."]
let customNameData = DefaultNameDataValues(suffixes: academicSuffixes)
DataFactory.shared.setNameDataValues(customNameData)
for _ in 1..<10 {
    print(DataFactory.shared.getSuffix(100)!)
}

我们的结果是:

Ph.D.
LL.D
Ph.D.
D.Phil.
Ed.D.
Ph.D.
D.B.A.
Ph.D.
D.Phil.

您可以始终从默认实现开始工作,并在需要时使用更符合本地要求的实现。

可以替换的不同部分如下

  • DefaultNameDataValues – 生成名字和后缀/前缀;
  • DefaultContentDataValues – 生成单词、业务类型、电子邮件域名和顶级域名值;
  • DefaultAddressDataValues - 生成城市名称、街道名称和地址后缀。

请注意,如果您打算替换生成单词的组件,您应该有一个长度从2到8个或更多字符的单词的良好集合。

作者

许可协议

本项目受MIT许可协议保护 - 有关详细信息,请参阅LICENSE.md文件。