एक स्विफ्ट कार्यान्वयन:
स्विफ्ट 2
let testBundle = NSBundle(forClass: self.dynamicType)
let fileURL = testBundle.URLForResource("imageName", withExtension: "png")
XCTAssertNotNil(fileURL)
स्विफ्ट 3, स्विफ्ट 4
let testBundle = Bundle(for: type(of: self))
let filePath = testBundle.path(forResource: "imageName", ofType: "png")
XCTAssertNotNil(filePath)
बंडल आपके कॉन्फ़िगरेशन के लिए मुख्य और परीक्षण पथ खोजने के तरीके प्रदान करता है:
@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
7 | | 8 | Xcode 6 में 9, एक इकाई परीक्षण बंडल पथ में हो जाएगा Developer/Xcode/DerivedData
की तरह कुछ ...
/Users/
UserName/
Library/
Developer/
Xcode/
DerivedData/
App-qwertyuiop.../
Build/
Products/
Debug-iphonesimulator/
AppTests.xctest/
foo.txt
... जो Developer/CoreSimulator/Devices
नियमित (गैर-इकाई-परीक्षण) बंडल पथ से अलग है :
/Users/
UserName/
Library/
Developer/
CoreSimulator/
Devices/
_UUID_/
data/
Containers/
Bundle/
Application/
_UUID_/
App.app/
यह भी ध्यान दें कि इकाई परीक्षण निष्पादन योग्य है, डिफ़ॉल्ट रूप से, एप्लिकेशन कोड के साथ जुड़ा हुआ है। हालांकि, यूनिट टेस्ट कोड में केवल टेस्ट बंडल में लक्ष्य सदस्यता होनी चाहिए। आवेदन कोड में केवल आवेदन बंडल में लक्ष्य सदस्यता होनी चाहिए। रनटाइम के दौरान, इकाई परीक्षण लक्ष्य बंडल को निष्पादन के लिए एप्लिकेशन बंडल में इंजेक्ट किया जाता है ।
स्विफ्ट पैकेज मैनेजर (एसपीएम) 4:
let testBundle = Bundle(for: type(of: self))
print("testBundle.bundlePath = \(testBundle.bundlePath) ")
नोट: डिफ़ॉल्ट रूप से, कमांड लाइन swift test
एक MyProjectPackageTests.xctest
टेस्ट बंडल बनाएगी । और, swift package generate-xcodeproj
वसीयत एक MyProjectTests.xctest
परीक्षण बंडल बनाएगी । इन अलग-अलग टेस्ट बंडलों के अलग-अलग रास्ते हैं । इसके अलावा, विभिन्न परीक्षण बंडलों में कुछ आंतरिक निर्देशिका संरचना और सामग्री अंतर हो सकते हैं ।
किसी भी मामले में, .bundlePath
और .bundleURL
वर्तमान में macOS पर चलाए जा रहे परीक्षण बंडल का पथ लौटाएगा। हालांकि, Bundle
वर्तमान में उबंटू लिनक्स के लिए लागू नहीं किया गया है।
इसके अलावा, कमांड लाइन swift build
और swift test
वर्तमान में संसाधनों की नकल के लिए एक तंत्र प्रदान नहीं करते हैं।
हालांकि, कुछ प्रयासों के साथ, स्विफ्ट पैकेज मैंगर को मैकओएस एक्सकोड, मैकओएस कमांड लाइन और उबंटू कमांड लाइन वातावरण में संसाधनों के साथ उपयोग करने के लिए प्रक्रियाओं को स्थापित करना संभव है। एक उदाहरण यहाँ पाया जा सकता है: 004.4'2 SW देव स्विफ्ट पैकेज मैनेजर (SPM) रिसोर्स Qref के साथ
इसे भी देखें: स्विफ्ट पैकेज मैनेजर के साथ यूनिट टेस्ट में संसाधनों का उपयोग करें
स्विफ्ट पैकेज मैनेजर (एसपीएम) 4.2
स्विफ्ट पैकेज मैनेजर PackageDescription 4.2 स्थानीय निर्भरता के समर्थन का परिचय देता है ।
स्थानीय निर्भरता डिस्क पर पैकेज हैं जिन्हें सीधे उनके रास्तों का उपयोग करके संदर्भित किया जा सकता है। स्थानीय निर्भरताएँ केवल रूट पैकेज में दी जाती हैं और वे पैकेज ग्राफ़ में एक ही नाम से सभी निर्भरताएँ ओवरराइड करती हैं।
नोट: मैं उम्मीद करता हूं, लेकिन अभी तक परीक्षण नहीं किया है, कि एसपीएम 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"]
),
]
)