当前位置: 首页 > 知识库问答 >
问题:

Xcode单元测试

危彬彬
2023-03-14

我从来没有使用过单元测试,我了解它的用途,但我真的不知道何时以及如何使用它。

我想知道什么时候值得使用单元测试,也许可以用一些例子。

共有3个答案

司易安
2023-03-14

无论何时编写需要维护的代码,都要编写单元测试。也就是说,如果你想重构任何东西——修改代码,但保留行为。这几乎是生产代码的每一部分。

“你好,世界”的反例是不要费心于你计划扔掉的代码。“峰值解决方案”只是为了弄清楚你可能如何处理一个问题。一旦你弄清楚了,就扔掉它,重新开始。只是这一次,你从测试开始。

称TDD为“极端主义者”听起来不合理和不切实际。事实上,一旦你学会了TDD,它就节省了时间/金钱。

有关TDD如何工作的示例,请参阅使用OCUnit的单元测试示例。

松思源
2023-03-14

您几乎应该总是进行单元测试,并且应该在编写代码时考虑单元测试。极端分子甚至在编写代码之前就编写测试(称为TDD——测试驱动开发)。

我给你一个真实的例子:我最近不得不编写一个支持“间隔”的有序NSArray。意思是,数组应该知道如何插入间隔并保持排序。

例如,数组将如下所示:[1-3,5-9,12-50]。在本例中,数组中有3个间隔,如您所见,它们已排序。在我编写类(我称之为IntervalsArray)之后,我必须编写测试以确保它正常工作,并且如果我或其他人将来对代码进行更改,我不会“破坏”它。

下面是一些示例测试(伪代码):

测试1:

- Create a new IntervalsArray
- Insert a new interval to the array
- (TEST) make sure the array has 1 object in it

测试2:

- Create a new IntervalsArray
- Insert 2 intervals into the array: [1-3] and [5-9]
- (TEST) make sure there are 2 items in the array
- (TEST) make sure interval [1-3] comes before interval [5-9]

最后,我有大约15个测试来覆盖我的新阵列的各个方面。

下面是一个很好的Xcode单元测试教程。

你也可以编写逻辑测试(比单元测试更复杂)来测试你的UI。阅读一点关于UIAutomation的信息,这是苹果测试UI的方式。它不完美,但很好。这里有一个关于这个的优秀教程

如果你认为自己是一个优秀的程序员,你应该为代码编写单元测试。

苏坚成
2023-03-14

其他答案告诉我们什么时候,但不知道如何,所以让我也补充一个答案。

无论何时编写要保留的生产代码,都应该对其进行单元测试。我在这方面看到的最有用的培训是以下两部分视频系列:

  • 了解测试驱动开发(第一部分)
  • Roy Osherove的单元测试最佳实践(第2部分)

前五分钟左右只是介绍,你可以跳到最后。

我使用的是Xcode 7和Swift。

启动新项目并添加单元测试。

我打电话给我的MyProject。如果在项目导航器中打开MyProjectTests组,您将看到Xcode已经为您创建了一个名为MyProjectTest的单元测试文件。敏捷的

现在可以删除所有示例方法,并添加一个新的func来测试自己的类方法。确保在顶部添加行@testable import MyProject。如果项目名称中有空格,则用下划线替换空格。(例如,“我的示例项目”将使用@testable import My_example_Project

我遵循的是testMethodNameBeingTested_Senario_ExpectedBehavior的命名模式。单元测试名称必须以"test"开头。

我会这样做:

import XCTest
@testable import MyProject

class MyProjectTests: XCTestCase {
    
    func testSum_TwoNumbers_ReturnsSum() {
        // Arrange (set up the needed objects)
        let myClass = MyClass()
        
        // Act (run the method you want to test)
        let sum = myClass.sum(1, 2)
        
        // Assert (test that the behavior is as expected)
        XCTAssertEqual(sum, 3)
        
    }
}

当然,构建失败是因为我们还没有添加MyClass类。

添加你的类。

我正在为MyProject添加一个名为MyClass的Swift文件。

class MyClass {
    
    func sum(a: Int, _ b: Int) -> Int {
        return a + b
    }
}

按测试单元类或方法旁边的测试按钮再次运行测试,测试应该通过。

要看到它失败(单元测试的一个重要部分),可以在MyClasssum方法中执行类似于return 0的操作。然后,在运行测试时,您将看到以下内容:

您可以返回并修复此问题,然后添加更多单元测试。如果您愿意,您也可以为不同的类制作其他单元测试文件。只需右键单击项目导航器中的MyProjectTest组,然后选择“新文件”,然后选择测试用例类。

Xcode用户界面测试示例

 类似资料:
  • 我有一个混合了objective-c和Swift的项目,我试图为它编写单元测试。我的项目名称是:Alphaproject我的产品模块名称是:Alphaproject我在我的主要目标(Alphaproject)中设置为YES Defines module,并设置为YES EnableTestability,以便仅在此同一目标中进行调试。 在我的测试类中,我尝试导入我的产品模块名称: @可测试导入项目

  • 单元测试涉及测试软件应用程序的每个单元或单个组件。这是第一级软件测试。单元测试的目的是验证单元组件的性能。 单元是软件系统的单个可测试部分,并在应用程序软件的开发阶段进行测试。 此测试旨在测试隔离代码的正确性。单元组件是应用程序的单独功能或代码。白盒测试方法用于单元测试,通常由开发人员完成。 在测试级别层次结构中,单元测试是在集成和其他剩余测试级别之前完成的第一级测试。它使用模块进行测试,减少了等

  • 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如 C 语言中单元指一个函数,Java 里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进

  • 我们从 Hello World 项目入手,增加单元测试功能。 我们新家了一个名为hello-world-test的 Gradle 项目。 环境 Gradle 3.4.1 Spring Boot 1.5.2.RELEASE Thymeleaf 3.0.3.RELEASE Thymeleaf Layout Dialect 2.2.0 Spring Security Test 4.2.2.RELEASE

  • 单元测试验证单个代码单元是否按预期工作。 也就是说,给定不同的输入参数, 测试验证类方法返回预期结果。 单元测试通常由编写待测试类的人开发。 Yii的单元测试框架 Codeception 基于 PHPUnit,Codeception 建议遵从 PHPUnit 的文档的进行开发: Codeception for Yii framework Codeception Unit Tests PHPUnit

  • 单元测试 ClojureScript 的测试和 Clojure 语法类似, 通过 cljs.test 来提供. 首先需要引用下面这些函数或者 Macros: (ns my-project.tests (:require [cljs.test :refer-macros [deftest is testing run-tests]])) 然后可以定义一个测试: (deftest test-num