Trước hết, Tôi biết rằng câu hỏi này là nguy hiểm gần: How to MapPath in a unit test in C#C# đơn vị kiểm tra: Kiểm tra một phương pháp có sử dụng MapPath
Tôi hy vọng tuy nhiên, nó có một giải pháp khác nhau. Vấn đề của tôi sau:
Trong mã của tôi, tôi có một đối tượng cần được xác thực. Tôi đang tạo các bài kiểm tra đơn vị cho từng phương pháp xác thực để đảm bảo rằng nó đang xác thực chính xác. Tôi đang tạo dữ liệu giả và tải nó vào đối tượng, sau đó xác nhận nó. Vấn đề là trong quá trình xác nhận, khi một lỗi xảy ra, một mã lỗi được gán. Mã lỗi này được sử dụng để thu thập thông tin về lỗi từ tệp xml bằng cách sử dụng Server.MapPath. Tuy nhiên, khi cố gắng lấy tệp xml, một ngoại lệ được ném có nghĩa là không thể tìm thấy tệp.
Vì MapPath nằm trong mã xác nhận của tôi chứ không phải kiểm tra đơn vị của tôi, làm cách nào để kiểm tra đơn vị của tôi nhận ra đường dẫn? Câu hỏi này có hợp lý không?
Error Line (Trong mã Validation tôi KHÔNG thử nghiệm đơn vị của tôi):
XDocument xdoc = XDocument.Load(HttpContext.Current.Server.MapPath("App_Data/ErrorCodes.xml"));
Giản: Các Unit Test gọi một phương pháp trong chương trình của tôi mà các cuộc gọi Server.MapPath mà sau đó thất bại.
GetPath() có thể là ảo. – dahlbyk
@Dan HttpContext.Current. trả về null khi chúng ta chạy từ TestProject. Bất kỳ cách nào để tránh điều này? –
@JibinMathew Có, không sử dụng 'HttpContext.Current'. Tôi biết điều đó nghe có vẻ tinh tế nhưng đó là sự thật. Nói chung, không giả lập các lớp mà bạn không sở hữu, nhưng bạn có thể viết một lớp trình bao bọc cho 'HttpContextBase', thực hiện chức năng mong muốn của bạn. –