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?
La mejor manera es agregar un puente, creo.
Mire en https://gist.github.com/akolov/8894408226dab48d3021
esto funciona para mi.
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()
}
}