একটি দ্রুত পরিবর্তন:
সুইফট 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
এক্সকোড 6 | 7 | 8 | 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বর্তমানে ম্যাকোএসে চালিত পরীক্ষার বান্ডিলের পথে ফিরে আসবে। তবে Bundleবর্তমানে উবুন্টু লিনাক্সের জন্য প্রয়োগ করা হয়নি।
এছাড়াও, কমান্ড লাইন swift buildএবং swift testবর্তমানে সংস্থানগুলি অনুলিপি করার জন্য কোনও ব্যবস্থা সরবরাহ করে না।
তবে কিছু চেষ্টা করে ম্যাকস এক্সকোড, ম্যাকোস কমান্ড লাইন এবং উবুন্টু কমান্ড লাইন পরিবেশে সংস্থান সহ সুইফট প্যাকেজ ম্যানেজার ব্যবহারের জন্য প্রক্রিয়াগুলি স্থাপন করা সম্ভব। একটি উদাহরণ এখানে পাওয়া যাবে: 004.4'2 রিসোর্স Qref সহ এসডাব্লু দেব সুইফট প্যাকেজ ম্যানেজার (এসপিএম)
আরও দেখুন: সুইফট প্যাকেজ ম্যানেজারের সাথে ইউনিট পরীক্ষায় সংস্থানগুলি ব্যবহার করুন
সুইফট প্যাকেজ ম্যানেজার (এসপিএম) 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"]
),
]
)