Tôi có một số bài kiểm tra đơn vị mà tôi đang viết cho một ứng dụng WPF, và nhiều như tôi đã cố gắng tránh nó, tôi có một số mã được kiểm tra mà instantiates một View. Ngay khi khung nhìn được khởi tạo, tất cả các phần mở rộng đánh dấu, kiểu, vv được đánh giá. Để giải quyết này, tôi đã tạo ra một hình nộm Application và đăng ký bất kỳ nguồn lực cần thiết khi lắp ráp thử nghiệm được khởi tạo:Đơn vị kiểm thử WPF ứng dụng với gói siteoforigin Uri
[TestClass]
public class AssemblyInitialize
{
[AssemblyInitialize]
public static void SetupTestAssembly(TestContext context)
{
if (Application.Current == null)
new Application();
var resources = new List<string>
{
"pack://application:,,,/AssemblyName;component/ResourceDictionary.xaml"
};
foreach(var resource in resources)
{
var uri = new Uri(resource);
var dictionary = new ResourceDictionary { Source = uri };
Application.Current.Resources.MergedDictionaries.Add(dictionary);
}
}
}
Tôi đã sử dụng phương pháp này trong quá khứ, và nó hoạt động ok.
Tôi đã chạy vào một trò lừa bịp nhỏ với cách tiếp cận này. Tôi có một vài tài nguyên sử dụng gói : // siteoforigin: trong gói Uri và khi thử nghiệm khởi tạo chế độ xem này, tôi gặp lỗi về việc không thể giải quyết tệp.
Các XAML:
<ResourceDictionary
xmlns="...">
<ImageBrush
x:Key="ResourceName"
ImageSource="pack://siteoforigin:,,,/Resources/image.png"
/>
</ResourceDictionary>
Thông báo Lỗi:
Could not find a part of the path 'C:\\Solution\\TestResults\\Workspace_2012-03-01 14_54_29\\Resources\\image.png'
Tôi đã thêm vào thư mục Resources như là một mục triển khai, và tôi đã xác nhận rằng hình ảnh là Thư mục đầu ra TestRun. Dường như AppDomain đang hoạt động một thư mục ở trên nơi vị trí của các hội đồng kiểm tra của tôi, bởi vì tệp thực sự được đặt tại:
c: \ Solution \ TestResults \ Workspace_2012-03-01 14_54_29 \ Out \ Resources \ image.png
Bất kỳ đề xuất nào về cách tôi có thể yêu cầu Ứng dụng WPF sử dụng thư mục Out làm thư mục chính?
Tính năng này có hoạt động để buộc thư mục cơ sở của Appdomain của bạn không? 'AppDomain.CurrentDomain.SetData (" APPBASE "," FolderNameHere ");' Dường như có cách nào tốt hơn, nhưng bộ nhớ của tôi đã thất bại. Điều này có thể đủ tốt (tm). – ianschol
Được đào sâu vào điều này trong nhiều giờ. AppDomain.CurrentDomain.BaseDirectory trả về thư mục Out. – bryanbcook