Tag: Sandi Metz

知道如何进行单元测试的绝佳过程(您的Swift代码)

我将向您展示一种方法,该方法可以确定应测试的内容以及一些概念,使编写测试时的生活更加轻松。 在我职业生涯的某个时刻,我知道单元测试的重要性,但是我不知道如何测试代码。 许多人都面临着同样的问题。 我们阅读了有关如何开始的文章,但仍然很难将我们学到的东西应用到我们自己的代码中。 通常,我们没有那些仅对两个参数求和并返回结果的函数,我们在许多示例中都可以看到它。 好吧,我遇到了一个过程,这对我来说真的很容易。 我要说的第一件事是,您无需更改体系结构即可开始单元测试。 当某些开发人员听到某种结构可以使代码更具可测试性时,这是一个错误。 然后他们等到转移到这种新的编码方式开始编写测试。 让我们不要那样做! 如果要测试现有代码,则可能需要重构某些部分,但绝对不要更改您的体系结构! 消息是对象在面向对象的世界中彼此交谈的方式。 您希望对象执行方法时将消息传递给该对象。 获取属性值是相同的,并且适用于其他所有条件! 知道要测试什么的过程包含三个简单的步骤 ,并且都涉及消息。 1.确定消息的类型 消息有两种可能的类型:查询和命令。 这可能很明显,但是查询是当您要求某事时,而命令是当您告诉它要某事时。 查询具有返回值,但是在命令没有返回值时却不会更改任何状态,但是会产生一些副作用。 查询 =返回什么,什么也没改变 命令 =不返回任何内容并更改某些内容 2.标识消息的来源 一条消息可能有三个来源:传入,传出和发送给自己。 传入 :当一个对象从外部(另一个对象)接收到消息时。 传出 :当对象向外部发送消息时。 自我发送 :猜猜是什么?! 当对象向自身发送消息时。 3.遵循以下图表: 哦! 多么棒的图表! 对?! 保持这种状态直到对您自然。 第一个例子是采用Equatable。 该函数具有返回值,并且不会更改任何状态。 这是一个查询! 它是公共的,可以由另一个想知道两个Wallet是否相等的对象调用。 进来! 传入查询:声明结果。 传入查询非常简单。 您有一个预期的结果,然后调用该函数并断言它(如果它返回了预期的结果)。 (单词sut代表sut系统。在下面的示例中也将使用它) 第二个例子:在loadView之后,您想确保您的插座正确钩住! 他们在这一点上不应该零。 该函数没有返回值,调用后应设置出口。 因此,它有副作用。 所以,这是一个命令! (副作用是直接公开的,因为出口是sut上的财产 ) 该模块是公共的,可以从外部调用。 […]