transportation the programming meaning lenguaje language español swift

the - Prueba de la unidad Swift con XCTAssertThrows analógico



swift wikipedia (5)

Creo que la función assert() solo debería usarse para fines de depuración. No solo por la siguiente declaración de Swift-Book de Apple ( https://itun.es/de/jEUH0.l ):

"Las afirmaciones hacen que su aplicación finalice y no sustituyen el diseño de su código de tal manera que es poco probable que surjan condiciones inválidas".

Es por eso que resolvería esto de la siguiente manera:

import Cocoa import XCTest class Square { let sideLength: Int init(_ sideLength: Int) { self.sideLength = sideLength >= 0 ? sideLength : 0 } } class SquareTests: XCTestCase { override func setUp() { super.setUp() } override func tearDown() { super.tearDown() } func testMySquareSideLength() { let square1 = Square(1); XCTAssert(square1.sideLength == 1, "Sidelength should be 1") let square2 = Square(-1); XCTAssert(square2.sideLength >= 0, "Sidelength should be not negative") } } let tester = SquareTests() tester.testMySquareSideLength()

¿Hay algún equivalente para verificar las excepciones de lanzamiento en las pruebas de unidad de lenguaje swift?

Por ejemplo tengo una clase:

class Square : NSObject{ let sideLength: Int init(sideLength: Int) { assert(sideLength >= 0, "Wrong initialization of Square class with below zero side length") self.sideLength = sideLength super.init() } }

y prueba para comprobar si funciona. En el objetivo, CI puede escribir un método de prueba como este:

- (void)testInitializationWithWrongSideLengthThrowsExceptions{ XCTAssertThrows([[Shape alloc] initWithSideLength: -50], "Should throw exceptions on wrong side values initialisations"); }

¿Qué es Swift técnica igual?



No hay equivalente a XCTAssertThrows en swift. Por ahora no puedes usar una función nativa, pero hay una solución con algo de ayuda objetiva. Puedes usar Quick, o solo Nimble. O para hacer su propia función de afirmación - vea este artículo - http://modocache.io/xctest-the-good-parts - Potencial de mejora # 2: Agregue XCTAssertThrows a Swift


Si agrega los siguientes tres archivos a sus pruebas:

// ThrowsToBool.h #import <Foundation/Foundation.h> /// A ''pure'' closure; has no arguments, returns nothing. typedef void (^VoidBlock)(void); /// Returns: true if the block throws an `NSException`, otherwise false BOOL throwsToBool(VoidBlock block); // ThrowsToBool.m #import "ThrowsToBool.h" BOOL throwsToBool(VoidBlock const block) { @try { block(); } @catch (NSException * const notUsed) { return YES; } return NO; } // xxxTests-Bridging-Header.h #import "ThrowsToBool.h"

Entonces puedes escribir:

XCTAssert(throwsToBool { // test code that throws an NSException })

Pero no funciona para afirmar o precondición :(

PS Tengo la idea de: http://modocache.io/xctest-the-good-parts


forma correcta en Swift 2:

class Square : NSObject{ let sideLength: Int init(sideLength: Int) throws { // throwable initializer guard sideLength >= 0 else { // use guard statement throw ...// your custom error type } self.sideLength = sideLength super.init() } }

y pruebas:

func testInitThrows() { do { _ = try Square(sideLength: -1) // or without parameter name depending on Swift version XCTFail() } catch ... { // your custom error type } catch { XCTFail() } }