Swift中的单元测试

要测试的类

import Cocoa

class SimpleInterest: NSObject
{
    func calculate(loanAmount: Double, var interestRate: Double,years: Int) ->Double
    {
        interestRate = interestRate / 100.0
        let interest = Double(years) * interestRate * loanAmount
        return loanAmount + interest
    }

    func calculateAdd(num1: Double,num2: Double) ->Double
    {
        return num1 + num2
    }

}

  

测试代码:

import XCTest
import Cocoa

@testable import TestDemo

class TestDemoTests: XCTestCase {

    var mySimpleInterestCaculator: SimpleInterest = SimpleInterest()

    override func setUp() {
        super.setUp()

        print("starting test ")

        print("使用这个类中的每个测试方法前都会调用该方法,可以在这里插入对应的全局设置代码")
    }

    override func tearDown() {

        print("end test")
        print("使用这个类中的每个测试方法后都会调用该方法,可以在这里插入全局配置代码 -如清理设置等")

        super.tearDown()
    }

    func testAdd()
    {
        let result = mySimpleInterestCaculator.calculateAdd(12, num2: 12)
        // accuracy 表示 精确性
        XCTAssertEqualWithAccuracy(result, 24.01, accuracy: 0.1, "error: Unexpected result->\(result)")
    }

    func testSimpleInterest() {
        let result = mySimpleInterestCaculator.calculate(25_000, interestRate: 0.08, years: 10)
        XCTAssertEqualWithAccuracy(result, 25200, accuracy: 0.1, "error: Unexpected result->\(result)")

    }

}

单机左侧的测试按钮即可执行测试!

始终运行的测试:

单元测试必须运行才能发挥作用,如果要在每次运行应用程序时都运行测试呢?

点击工程 -- > target -> Build Phases --> Target Dependencies  : add dependency

至此 将测试指定为应用程序的一个依赖,因此每次编译该应用程序的时候都将首先编译并执行测试! 如果有测试未通过,将不会编译应用程序

时间: 2024-08-10 15:58:15

Swift中的单元测试的相关文章

[译] 探究 Swift 中的 Futures & Promises

原文地址:Under the hood of Futures & Promises in Swift 原文作者:John Sundell 译者:oOatuo 校对者:Kangkang, Richard_Lee 探究 Swift 中的 Futures & Promises 异步编程可以说是构建大多数应用程序最困难的部分之一.无论是处理后台任务,例如网络请求,在多个线程中并行执行重操作,还是延迟执行代码,这些任务往往会中断,并使我们很难调试问题. 正因为如此,许多解决方案都是为了解决上述问题而

Swift 中的Range和NSRange不同

Swift中的Ranges和Objective-C中的NSRange有很大的不同,我发现在处理Swift中Ranges相关的问题的时候,总是要花费比我想象的更多的时间.不过,现在回过头来看看,发现Swift中的Ranges的使用还是比较合理的,但是想要正确的使用Ranges真的需要一些特别的技巧. 看一个例子,下面这段代码展示的是截取以指定的字符开头和以指定的字符结尾的子字符串: ? 1 2 3 4 5 6 var str = "Hello, playground"   let ran

Swift 中的基础语法(二)

1.Swift 中的函数 /// 函数的定义 /// /// - Parameters: /// - x: 形参 /// - y: 形参 /// - Returns: 返回值 func sum(x: Int, y: Int) -> Int { return x + y } print(sum(x: 10, y: 20))   /* 外部参数就是在形参前面加了一个字 外部参数不会影响函数内部的细节 外部参数会让外部调用看起来更加直观 外部参数如果使用了'_',在外部调用函数时,会忽略形参的名字 &qu

Swift中的错误处理

前言 任何代码都会发生错误,这些错误有些是可以补救的,有些则只能让程序崩溃.良好的错误处理能够让你的代码健壮性提高,提高程序的稳定性. 本文的Swift版本:Swift 3 Objective C 返回nil 如果出错了,就返回空是Objective C中的一种常见的处理方式.因为在Objective C中,向nil发送消息是安全的.比如: - (instancetype)init { self = [super init]; if (self) { } //如果初始化失败,会返回nil ret

swift中代理的使用

下面以自定义的UITableViewCell的代理为例,记录一下swift中代理的使用 controller中的代码如 1 // 2 // ViewController.swift 3 // simpleDemo 4 // 5 // Created by liubo on 16/7/25. 6 // Copyright © 2016年 liubo. All rights reserved. 7 // 8 9 import UIKit 10 11 class ViewController: UIV

SWIFT中的repeat...while

SWIFT中的repeat...while类似于JAVA\.NET中的 do while.大同小异只是把do换成了repeat var index = 10 repeat{ print(index) index-- } while(index>0)

Swift中的结构体,类,协议,扩展和闭包的用法以及? 和 !的区别

// MARK: - 1.结构体 //1.声明一个结构体 struct Rect {    // 声明结构体变量的属性(存储属性)    var x:Float    var y:Float    var width:Float    var height:Float    // 声明结构体属性,要使用static    static var description:String?        // 声明一个计算属性(是用来专门计算结构体变量属性的setter,和getter方法,其本身没有存

Swift中编写单例的正确方式

Swift中编写单例的正确方式 2015-12-07 10:23 编辑: yunpeng.hu 分类:Swift 来源:CocoaChina翻译活动 14 10647 Objective-CSwift单例 招聘信息: Cocos2d-x 工程师 cocos2dx手游客户端主程 wp开发 iOS开发工程师 iOS软件工程师 iOS研发工程师 iOS讲师 iOS开发工程师 iOS高级开发工程师 iOS 高级软件工程师 iOS高级开发工程师 本文由CocoaChina译者leon(社区ID)翻译自kr

[Swift中错误]missing argument label 'greeting:' in call

Swift 中出现这个问题:从第二个参数起,自动加上lable func sayHello(name:String? ,greeting:String)->String { let result = greeting + "," + (name ?? "Guest") + "!" return result } var nickname:String? nickname = "yc" //“Goodmorning前面应该