Uma implementação 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)
O pacote fornece maneiras de descobrir os caminhos principais e de teste para sua configuração:
@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
No Xcode 6 | 7 | 8 | 9, um caminho de pacote de teste de unidade estará em Developer/Xcode/DerivedData
algo como ...
/Users/
UserName/
Library/
Developer/
Xcode/
DerivedData/
App-qwertyuiop.../
Build/
Products/
Debug-iphonesimulator/
AppTests.xctest/
foo.txt
... que é separado do Developer/CoreSimulator/Devices
caminho regular do pacote configurável (sem teste de unidade) :
/Users/
UserName/
Library/
Developer/
CoreSimulator/
Devices/
_UUID_/
data/
Containers/
Bundle/
Application/
_UUID_/
App.app/
Observe também que o executável do teste de unidade está, por padrão, vinculado ao código do aplicativo. No entanto, o código do teste de unidade deve ter apenas a associação de destino apenas no pacote de teste. O código do aplicativo deve ter apenas a associação de destino no pacote de aplicativos. No tempo de execução, o pacote de destino do teste de unidade é injetado no pacote de aplicativos para execução .
Gerenciador de Pacotes Swift (SPM) 4:
let testBundle = Bundle(for: type(of: self))
print("testBundle.bundlePath = \(testBundle.bundlePath) ")
Nota: Por padrão, a linha de comandos swift test
criará um MyProjectPackageTests.xctest
pacote configurável de teste. E, o swift package generate-xcodeproj
criará um MyProjectTests.xctest
pacote de teste. Esses diferentes pacotes de teste têm caminhos diferentes . Além disso, os diferentes pacotes configuráveis de teste podem ter alguma estrutura interna de diretórios e diferenças de conteúdo .
Nos dois casos, o .bundlePath
e .bundleURL
retornará o caminho do pacote de teste atualmente em execução no macOS. No entanto, Bundle
atualmente não está implementado para o Ubuntu Linux.
Além disso, a linha de comando swift build
e swift test
atualmente não fornece um mecanismo para copiar recursos.
No entanto, com algum esforço, é possível configurar processos para usar o Swift Package Manger com recursos nos ambientes macOS Xcode, linha de comando do macOS e linha de comando do Ubuntu. Um exemplo pode ser encontrado aqui: 004.4'2 SW Dev Swift Package Manager (SPM) com recursos Qref
Consulte também: Use recursos em testes de unidade com o Swift Package Manager
Swift Package Manager (SPM) 4.2
O Swift Package Manager PackageDescription 4.2 apresenta suporte para dependências locais .
Dependências locais são pacotes no disco que podem ser referidos diretamente usando seus caminhos. As dependências locais são permitidas apenas no pacote raiz e substituem todas as dependências com o mesmo nome no gráfico do pacote.
Nota: Espero, mas ainda não testei, que algo como o seguinte seja possível com o 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"]
),
]
)