Una implementación rápida:
Swift 2
let testBundle = NSBundle(forClass: self.dynamicType)
let fileURL = testBundle.URLForResource("imageName", withExtension: "png")
XCTAssertNotNil(fileURL)
Swift 3, Swift 4
let testBundle = Bundle(for: type(of: self))
let filePath = testBundle.path(forResource: "imageName", ofType: "png")
XCTAssertNotNil(filePath)
Bundle proporciona formas de descubrir las rutas principales y de prueba para su configuración:
@testable import Example
class ExampleTests: XCTestCase {
func testExample() {
let bundleMain = Bundle.main
let bundleDoingTest = Bundle(for: type(of: self ))
let bundleBeingTested = Bundle(identifier: "com.example.Example")!
print("bundleMain.bundlePath : \(bundleMain.bundlePath)")
// …/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Agents
print("bundleDoingTest.bundlePath : \(bundleDoingTest.bundlePath)")
// …/PATH/TO/Debug/ExampleTests.xctest
print("bundleBeingTested.bundlePath : \(bundleBeingTested.bundlePath)")
// …/PATH/TO/Debug/Example.app
print("bundleMain = " + bundleMain.description) // Xcode Test Agent
print("bundleDoingTest = " + bundleDoingTest.description) // Test Case Bundle
print("bundleUnderTest = " + bundleBeingTested.description) // App Bundle
En Xcode 6 | 7 | 8 | 9, una ruta de paquete de prueba unitaria estará en Developer/Xcode/DerivedData
algo así como ...
/Users/
UserName/
Library/
Developer/
Xcode/
DerivedData/
App-qwertyuiop.../
Build/
Products/
Debug-iphonesimulator/
AppTests.xctest/
foo.txt
... que es independiente de la Developer/CoreSimulator/Devices
ruta del paquete normal (sin prueba unitaria) :
/Users/
UserName/
Library/
Developer/
CoreSimulator/
Devices/
_UUID_/
data/
Containers/
Bundle/
Application/
_UUID_/
App.app/
También tenga en cuenta que el ejecutable de la prueba unitaria está, por defecto, vinculado con el código de la aplicación. Sin embargo, el código de prueba de la unidad solo debe tener la Membresía de destino solo en el paquete de prueba. El código de la aplicación solo debe tener Membresía de destino en el paquete de la aplicación. En tiempo de ejecución, el paquete de destino de prueba de unidad se inyecta en el paquete de aplicación para su ejecución .
Swift Package Manager (SPM) 4:
let testBundle = Bundle(for: type(of: self))
print("testBundle.bundlePath = \(testBundle.bundlePath) ")
Nota: Por defecto, la línea de comando swift test
creará un MyProjectPackageTests.xctest
paquete de prueba. Y, swift package generate-xcodeproj
creará un MyProjectTests.xctest
paquete de prueba. Estos diferentes paquetes de prueba tienen diferentes caminos . Además, los diferentes paquetes de prueba pueden tener alguna estructura interna de directorio y diferencias de contenido .
En cualquier caso, .bundlePath
y .bundleURL
devolverá la ruta del paquete de prueba que se está ejecutando actualmente en macOS. Sin embargo, Bundle
actualmente no está implementado para Ubuntu Linux.
Además, la línea de comandos swift build
y swift test
actualmente no proporcionan un mecanismo para copiar recursos.
Sin embargo, con un poco de esfuerzo, es posible configurar procesos para usar Swift Package Manager con recursos en macOS Xcode, macOS línea de comandos y Ubuntu en línea de comandos. Un ejemplo se puede encontrar aquí: 004.4'2 SW Dev Swift Package Manager (SPM) con recursos Qref
Ver también: Usar recursos en pruebas unitarias con Swift Package Manager
Swift Package Manager (SPM) 4.2
Swift Package Manager PackageDescription 4.2 introduce soporte de dependencias locales .
Las dependencias locales son paquetes en el disco que se pueden referir directamente usando sus rutas. Las dependencias locales solo están permitidas en el paquete raíz y anulan todas las dependencias con el mismo nombre en el gráfico del paquete.
Nota: Espero, pero aún no he probado, que algo como lo siguiente sea posible con SPM 4.2:
// swift-tools-version:4.2
import PackageDescription
let package = Package(
name: "MyPackageTestResources",
dependencies: [
.package(path: "../test-resources"),
],
targets: [
// ...
.testTarget(
name: "MyPackageTests",
dependencies: ["MyPackage", "MyPackageTestResources"]
),
]
)